【发布时间】:2016-10-25 03:33:57
【问题描述】:
我正在尝试发出两个 HTTP 请求来检索数据,每个请求都有一个回调函数。只有在两个回调函数都完成后,我才想运行最后一段代码。也许这是我对承诺的不熟悉,但我似乎无法让它发挥作用。我只是让它立即或从不运行最终的 thenable 代码。
var p1 = getStatus(account1, currency, processStatus)
var p2 = getStatus(account2, currency, processStatus)
Promise.all([p1, p2]).then(function() {
// evaluate complete status
})
getStatus是一个coffeescript函数,它发出一个HTTP请求,一旦检索到数据,它就会调用提供的回调函数,也就是第三个参数。
getStatus: (acctId, curr, callback) =>
options = {url: url, account: acctId, currency: curr}
new Promise => request options, (err, resp, body) =>
if !err
return Promise.resolve callback(null, acctId, curr, JSON.parse(body))
processStatus 是一个 JavaScript 函数,用于处理检索到的数据。
module.exports.processStatus = function(err, acctId, curr, status) {
status.forEach(function(s) {
// ....
})
return Promise.resolve(true)
})
如何更改此设置以使 evaluate complete status 代码仅在 两个 processStatus 回调完成后执行?
【问题讨论】:
-
您的
processStatus似乎不是异步的。为什么它会返回一个承诺? -
我认为它需要返回一个承诺,因为它是 getStatus 的回调函数。我看不到让 Promise.all() 等到两个回调完成的另一种方法。即使 processStatus 没有返回承诺,您下面的答案是否有效?
-
不,
getStatus的promise和它的callback参数没有任何关系。是的,我的回答适用于任何返回任何内容的回调函数。
标签: javascript node.js callback coffeescript bluebird