私はプロミス、つまりwhen.jsを試していて、いくつかのテストコードを変換したいのですが、ドキュメントを読んだ後でもそれを行う方法が少し不明です。これまでの私の実験は、標準的なコールバック ピラミッドよりもはるかに複雑だったので、近道が欠けていると思います。
複製したいサンプルコードは次のとおりです。
Async1(function(err, res) {
res++;
Async2(res, function(error, result) {
done();
})
})
私はプロミス、つまりwhen.jsを試していて、いくつかのテストコードを変換したいのですが、ドキュメントを読んだ後でもそれを行う方法が少し不明です。これまでの私の実験は、標準的なコールバック ピラミッドよりもはるかに複雑だったので、近道が欠けていると思います。
複製したいサンプルコードは次のとおりです。
Async1(function(err, res) {
res++;
Async2(res, function(error, result) {
done();
})
})
nodefn.call(Async2, nodefn.call(Async1)).ensure(done);
ここでは、Async2実際に同期的に呼び出され、引数として Promise を使用します -解決するAsync1()のを待ちません。Async1それらをチェーンするには、使用する必要があります
nodefn.call(Async1).then(nodefn.lift(Async2)).ensure(done);
// which is equivalent to:
nodefn.call(Async1).then(function(result) {
return nodefn.call(Async2, result);
}).ensure(done);
2 つの呼び出しの間にいくつかのロジックを実行したい
次に、別の関数をチェーンに入れるか、チェーン内の関数の 1 つを変更する必要があります。
nodefn.call(Async1)
.then(function(res){return res+1;}) // return modified result
.then(nodefn.lift(Async2))
.ensure(done);
// or just
nodefn.call(Async1).then(function(res) {
res++; // do whatever you want
return nodefn.call(Async2, res);
}).ensure(done);
Whenについてはわかりませんが、Deferredライブラリを使用すると、次のようになります。
// One time configuration of promise versions
async1 = promisify(async1);
async2 = promisify(async2);
// construct flow
async1().then(function (res) { return async2(++res); }).done();