2017-01-01 156 views
0

我使用Promis模塊從請求模塊返回我的json數據,但每次運行它時,都會給我這個。Node.js承諾請求返回

Promise { _45: 0, _81: 0, _65: null, _54: null } 

我不能得到它的工作,任何人知道這個問題?這裏是我的代碼:

function parse(){ 
return new Promise(function(json){ 
    request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) { 
     json(JSON.parse(body).data.available_balance); 
    }); 
}); 
} 

console.log(parse()); 
+0

承諾返回一個承諾,它可以拋出,合同,這將解決(。然後)或一些數據拒絕(.catch)在稍後的點。我建議閱讀它們。您記錄返回的承諾。您的請求尚未返回。 – ste2425

回答

4

承諾是一個對象,充當將來值的佔位符。您的parse()函數返回該承諾對象。您可以通過一個.then()處理器連接到這樣的承諾得到這一承諾的未來價值:

function parse(){ 
    return new Promise(function(resolve, reject){ 
     request('https://bitskins.com/api/v1/get_account_balance/?api_key='+api+'&code='+code, function (error, response, body) { 
      // in addition to parsing the value, deal with possible errors 
      if (err) return reject(err); 
      try { 
       // JSON.parse() can throw an exception if not valid JSON 
       resolve(JSON.parse(body).data.available_balance); 
      } catch(e) { 
       reject(e); 
      } 
     }); 
    }); 
} 

parse().then(function(val) { 
    console.log(val); 
}).catch(function(err) { 
    console.err(err); 
}); 

這是異步的代碼,這樣你得到的值超出承諾的唯一途徑是通過.then()處理程序。

修改的列表:

  1. 添加返回承諾對象.then()處理程序來獲取最終結果。
  2. .catch()處理程序返回的承諾對象處理錯誤。
  3. request()回調中添加err值的錯誤檢查。
  4. 添加的try/catch周圍JSON.parse(),因爲如果無效JSON
+0

謝謝大家,學到了很多:) –