我只是想知道在使用promises时是否有人对Node JS中的“确保就绪”模式有任何好的想法。我有类似的东西,但我认为它的主要问题是我认为承诺的.then(cb)实际上会覆盖前一个,而不是链接另一个处理程序......
function awaitQueueCreation() {
if (!q._queueURL) return whenQueueCreated;
else return p.resolve(q._queueURL);
}
q.someQueueMethod = function(param) {
awaitQueueCreation().then(function() {
// do what this method is supposed to do...
});
};
你会如何处理这类事情?
答案 0 :(得分:2)
在同一个承诺上添加额外的.then()
处理程序只会为同一个承诺创建第二个通知。它不会链接到先前的.then()
处理程序。它不会覆盖任何先前的.then()
处理程序。
因此添加两个.then()
处理程序只需在承诺完全填充时依次对两个回调进行排序。
如果第一个.then()
处理程序本身返回一个未完成的承诺,则第二个.then()
处理程序仍然会立即被调用(它不是"链接"到新的未完成的承诺)。
要链接两个承诺,你必须做这样的事情:
p.then(...).then(...)
不
p.then(...)
p.then(...)