请原谅我对承诺概念的新手。我在 Node.js 中使用 Q 模块。我有一个函数,一旦它执行了所有必要的步骤,它就会调用回调。当我想从 Q 承诺中调用回调函数时,就会出现问题。
我想要的功能是能够在我到达最后一步时调用回调,并且不再处于承诺链中。因此,回调将返回到其原始操作。但是,正如我编写的那样,回调在 promise 的上下文中被调用。此时,如果回调(比如说)抛出错误,它会被此函数中的错误处理程序捕获,这不是我想要的!
var updateDataStream = function(data, input, posts, stream, callback) {
// Pack all the items up...
Q.ncall(data._packStream, data, posts, stream)
// Upsert the cache into the database
.then(function(){
return Q.ncall(data.upsert, data);
})
// buffer the new input
.then(function(res){
return Q.ncall(data.buffer, data, input);
})
.then(function(final){
callback(null, final);
})
.fail(function(err){
console.log('OHNOES!!!!!!!',err);
}).end();
}
在这种情况下,回调函数中发生的错误会导致“OHNOES!!!!!” 待打印……