Node.js 承诺请求返回
Posted
技术标签:
【中文标题】Node.js 承诺请求返回【英文标题】:Node.js promise request return 【发布时间】:2017-05-15 17:10:19 【问题描述】:我正在使用 promis 模块从请求模块返回我的 json 数据,但是每次我运行它时,它都会给我这个。
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());
【问题讨论】:
Promises 返回一个 Promise,一个它将在稍后用一些数据解析 (.then) 或拒绝 (.catch) 的合约。我建议阅读它们。您记录返回的承诺。您的请求此时尚未返回。 【参考方案1】:promise 是一个对象,用作未来值的占位符。您的 parse()
函数返回该承诺对象。您可以通过将 .then()
处理程序附加到 Promise 中来获得该 Promise 中的未来值,如下所示:
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);
);
这是异步代码,因此从 Promise 中获取值的唯一方法是通过 .then()
处理程序。
修改列表:
-
在返回的 promise 对象上添加
.then()
处理程序以获得最终结果。
在返回的 promise 对象上添加 .catch()
处理程序以处理错误。
在request()
回调中添加对err
值的错误检查。
在 JSON.parse()
周围添加 try/catch,因为如果 JSON 无效,它会抛出
【讨论】:
【参考方案2】:使用request-promise:
var rp = require('request-promise');
rp('http://www.google.com')
.then(function (response)
// resolved
)
.catch(function (err)
// rejected
);
【讨论】:
以上是关于Node.js 承诺请求返回的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 promise 将数组从我的模块返回到我的 API?异步函数和承诺 - Node.js