2016-11-17 38 views
0

我試圖從HTTP請求到字典中存儲一些數據,但是當我回來的字典,它始終是空Node.js的信息要求的問題(異步問題?)

function getUserData(id){ 
 
\t var user = {} 
 

 
\t request('http://apis.scottylabs.org/directory/v1/andrewID/' + id, function (error, response, body) { 
 
\t if (!error && response.statusCode == 200) { 
 
\t \t data = JSON.parse(body); 
 
\t \t user.name = data.first_name + " " + data.last_name; 
 
\t \t if (Array.isArray(data.department)){ 
 
\t \t  user.dept = data.department[0]; 
 
\t \t } else { 
 
\t \t  user.dept = data.department; 
 
\t \t } 
 
\t \t user.level = data.student_level; 
 
\t \t user.class = data.student_class; 
 
      // if i print user here it is correct 
 
\t } 
 
\t }) 
 
    // this is just returning {} 
 
\t return user; 
 
}

我該如何解決這個問題?

回答

0

問題是您的代碼是異步的,並且不會等待API響應返回「用戶」。

使用回調函數在響應返回時返回用戶。

事情是這樣的:

function getUserData (id, callback) { 
    var user = {}; 
    request(url, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 

      // if i print user here it is correct 
      callback(user); 
     } 
    }) 
} 

呼叫是這樣的:

getUserData(123, function (user) { 
    // do something with the user data 
}) 

如果你要CONSOLE.LOG()當前的代碼的每一步,將是這個樣子:

獲取調用的用戶數據。

空用戶創建

請求作出

空用戶返回從請求

響應