我想做类似的事情:
somePromiseFunc(value1)
.then(function(value2, callback) {
// insert the next then() into this function:
funcWithCallback(callback);
})
.then(function(dronesYouAreLookingFor){
// Have a party
})
.done();
它没有用。我无法让它工作。我被建议defer()
用于此目的。
他们自己的文档说我们应该为回调风格的函数使用延迟。虽然这很令人困惑,因为他们著名的扁平化金字塔示例都是关于回调的,但是这个示例太抽象了,无法理解。
因此,我看到很多人使用defer
s,这就是我所做的:
somePromiseFunc(value1)
.then(function(value2) {
var promise = q.defer();
funcWithCallback(function(err, dronesYouAreLookingFor){
if (!err)
promise.resolve(dronesYouAreLookingFor);
else
promise.reject(new Error(err));
});
return promise.promise;
})
.then(function(dronesYouAreLookingFor){
// Have a party
})
.done();
直到我通过检查源代码发现这也有效:
somePromiseFunc(value1)
.then(function(value2) {
return function() {
funcWithCallback(arguments[1]);
};
})
.then(function(dronesYouAreLookingFor){
// Have a party
})
.done();
为什么我不应该使用这个更简单的无证版本?
未记录,因为虽然这看起来像扁平化金字塔所做的那样,return function(){withCB(arguments[1])}
但return function(err, cb){withCB(cb)}
实际上不起作用。