【发布时间】:2015-07-26 19:09:46
【问题描述】:
我试图弄清楚如何使用 Promise,尤其是 Q 实现来清理 node.js 程序中一些混乱的嵌套回调。不幸的是,似乎很少有简单的例子可以说明我想做的事情。
这是我现在拥有的嵌套回调的简化版本:
var parent = this;
this.receiveMessage(params, function(err, request) {
if (err) console.log(err, err.stack);
else {
parent.handleMessage(request, function(response) {
parent.sendMessage(JSON.stringify(response), function() {
console.log("response sent");
var params = { ReceiptHandle:request.Messages[0].ReceiptHandle };
parent.deleteMessage(params, function() {
parent.waitForMessage();
});
});
});
}
});
如您所见,这非常混乱,并且有 4 级嵌套回调。
使用 Q,我发现您可以从以下内容开始:
Q.nfcall(this.connection.receiveMessage, params)
.then(function(err, request) {
return(Q.nfcall(this.handleMessage(request));
})
.then(function(response)) {
return(Q.nfcall(this.sendMessage(JSON.stringify(response))));
} ...
等等......但这似乎不太正确。首先,我需要对链中的每个函数调用 Q.nfcall 吗?另外,我是否可以避免使用回调时遇到的“this”问题?我是否以正确的方式使用承诺?
【问题讨论】:
标签: javascript node.js callback promise q