2017-01-01 200 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

谢谢大家,学到了很多:) –