28

node.js の Q モジュールを使用して、約束を理解しようとしていますが、小さな問題があります。

この例では:

ModelA.create(/* params */)
.then(function(modelA){
    return ModelB.create(/* params */);
})
.then(function(modelB){
    return ModelC.create(/* params */);
})
.then(function(modelC){

    // need to do stuff with modelA, modelB and modelC

})
.fail(/*do failure stuff*/);

.create メソッドは、各 .then() で promise then を返します。予想どおり、promise の解決された値を取得します。

ただし、最後の .then() では、以前に解決された 3 つの約束値をすべて取得する必要があります。

これを行う最良の方法は何ですか?

4

3 に答える 3

23

Bluebird promises ライブラリは、これに対する別のソリューションを提供します.bind()

次のようになります。

ModelA.create(/* params */).bind({})
.then(function (modelA) {
    this.modelA = modelA;
    return ModelB.create(/* params */);
})
.then(function (modelB) {
    this.modelB = modelB;
    return ModelC.create(/* params */);
})
.then(function (modelC) {
    // you have access to this.modelA, this.modelB and modelC;
});

ドキュメントには、このメソッドに関する興味深い情報がたくさんあります。

于 2014-08-09T19:06:04.453 に答える