2011-04-30 5 views
2
function getUserData(name) { 
var userData = {}; 
twitter.get('http://api.twitter.com/1/users/lookup.json', {screen_name:name}, function(data) { 
    userData = { 
     name: data[0].screen_name, 
     screenname: data[0].screen_name, 
     id: data[0].id, 
     url: data[0].url, 
     description: data[0].description 
    } 
}); 
return userData; 
} 

내가 좋아하는 뭔가를 쓸 수 있도록하려면 :이 함수에서 적절한 데이터를 반환하는 방법은 무엇입니까?

var userData = getUserData(name); 

을하고 그 userData에 개체를 반환해야합니다.

+0

아직 사용해 보지 않으셨습니까? 디버깅 시도는? 당신이 게시 한 코드로 지금 당장 어떻게됩니까? 나는 눈부신 오류를 보지 않아서 좀 더 자세한 내용을 얻는 데 도움이 될 것입니다. –

+0

비동기 프로그래밍의 본질을 오해하고 있습니다. 반환 할 때 함수에 데이터가 없습니다. 콜백은 나중에 데이터가 호출에서 반환 될 때 실행됩니다. – Orbling

답변

2

그렇지 않습니다.

AJAX 호출은 비동기식입니다. 콜백은 어떤 방식 으로든 사용해야합니다.

function getUserData(name, cb) { 
    var userData = {}; 
    twitter.get('http://api.twitter.com/1/users/lookup.json', { 
     screen_name: name 
    }, function(data) { 
     userData = { 
      name: data[0].screen_name, 
      screenname: data[0].screen_name, 
      id: data[0].id, 
      url: data[0].url, 
      description: data[0].description 
     } 
     cb(userData); 
    }); 
} 

getUserData(name, function(userData) { 
    // do stuff. 
}); 

당신이 jQuery를 1.5을 사용하는 경우 jQuery Deferred 객체 이연 약속을 사용할 수 있습니다.

function getUserData(name, cb) { 
    var def = new jQuery.Deferred(); 
    twitter.get('http://api.twitter.com/1/users/lookup.json', { 
     screen_name: name 
    }, function(data) { 
     var userData = { 
      name: data[0].screen_name, 
      screenname: data[0].screen_name, 
      id: data[0].id, 
      url: data[0].url, 
      description: data[0].description 
     } 
     def.resolve(userData); 
    }); 
    return def.promise(); 
} 

var promise = getUserData(name); 
promise.done(function(data) { 
    // do stuff. 
}); 
+0

ahh, ok, 의미가 있습니다 - 감사합니다 – fancy

+0

@float 거기에 동기식 아약스 전화를 할 수있는 옵션이 있지만 정말 나쁩니다. 이것은 모든 비용으로 피해야하며, 콜백이나 약속은 모든 경우에 바람직합니다. 동기식 아약스는 대규모 코드 기반을 다룰 때만 가능하며 리팩토링은 비용 효율적이지 않습니다. – Raynos

+0

나는 이상한 오류로 실행 해요 : 'userData.name해야 = "올바른 이름" .../server.js : 470 \t \t sys.puts ('userData.name해야 ='+ JSON .stringify (data [0] .name)); ^ TypeError : 'name'of undefined의 읽을 수 없습니다. ' – fancy

관련 문제