私は次のようなことをしたかった:
somePromiseFunc(value1)
.then(function(value2, callback) {
// insert the next then() into this function:
funcWithCallback(callback);
})
.then(function(dronesYouAreLookingFor){
// Have a party
})
.done();
うまくいきませんでした。私はそれを働かせることができませんでした。defer()
この目的で使用するように勧められました。
彼ら自身のドキュメントには、コールバック スタイルの関数には deferred を使用する必要があると書かれています。有名なフラット化ピラミッドの例はすべてコールバックに関するものであるため、これは紛らわしいですが、この例は抽象的すぎて従うことができません。
したがって、多くの人が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)}
いません。