【发布时间】:2015-11-25 20:19:25
【问题描述】:
我是 nodejs 的新手,正在努力寻找以下代码的问题。
我想要实现的是,一个接一个地调用几个方法,如果所有调用都成功,则返回成功,否则如果任何方法失败,则抛出错误。
我遇到的问题是,在所有方法执行之前,主方法终止,即使承诺尚未完成。
主要方法
processRequest(neworder).then(function (done) {
console.log('Successfully processed the order' + done);
res.sendStatus(200);
}).fail(function (error) {
res.status(404).send(error);
})
其他方法调用
module.exports.processRequest = function (Order) {
var deferred = Q.defer();
findX(Order)
.then(findYBasedOnPrevOutput)
.then(findZBasedOnPrevOutput)
.then(deferred.resolve())
.fail(function (err) {
console.log('Failed to process request' + err);
deferred.reject(err);
});
return deferred.promise;
}
var findX = function (order) {
var deferred = Q.defer()
db.list(order, function (address) {
console.log('Query success');
if (address == null)
deferred.reject('Error');
else {
deferred.resolve(address);
}
})
return deferred.promise;
};
我遇到的问题是,我在控制台中看到调用 findX 方法后的成功。我期待 findZ 方法后的成功消息。
您能否帮我找出上述代码的问题,感谢您在这方面的意见/建议
为简单起见,我没有在这里分享其他模块,但它们与 findX 非常相似
【问题讨论】:
-
` .then(deferred.resolve())` 应该是 ` .then(() => deferred.resolve())` - 你在做什么就像
setTimeout(fn(), 100)而不是@ 987654324@。另外,你正在做明确的建设:stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it -
@BenjaminGruenbaum .. 谢谢它的帮助。将 .then(deferred.resolve()) 更改为 .then(deferred.resolve) 解决了问题...感谢分享精彩链接。
-
@BenjaminGruenbaum 您能否将您的回复作为答案发布,以便我接受。
-
不,您可能应该删除您的问题,因为这是一个错字问题。
标签: javascript node.js promise q