2016-12-29 12 views
0

私は、2つのデータベース呼び出しを持つプロセスを持っています。最後に、最後の2つの応答を1つにマージする必要があります。Qでの約束連鎖での返答の保持方法

私はフラット・プロミス・チェインを使用していますが、私はどのように現在および以前の約束を返すのか分かりません。

私はこのようなものがあります:

let deferred = Q.Promise(); 

this.methodA('somevalue')  
.then(firstResponse => { 
    return this.methodB(firstResponse.prop1);  
}).then(secondResponse => { 
    return this.methodC(secondResponse.prop2);  
}).then(finalResponse => { 
    //Here I need firstResponse and secondResponse... meaby wrapped inside finalResponse 
    let response = { 
     prop1: finalResponse.firstResponse.prop1, 
     prop2: finalResponse.secondResponse.prop2 
    }; 
    deferred.resolve(response); 
}); 

return deferred.promise; 

PS:これは活字体であるが。私は探している簡単な例を行うために多くのコードを削除しました。

+0

あなたはmethodCの結果が必要なのですか?それは応答のどこに送信されますか? – hackerrdave

答えて

1

あなたはfirstResponseとmethodBの結果の両方を返すことができます:

let deferred = Q.Promise(); 

this.methodA('somevalue')  
    .then(firstResponse => { 
    return Q.all([this.methodB(firstResponse.prop1), Q(firstResponse.prop1)];  
    }).then(secondResponse => { 
    return Q.all([this.methodC(secondResponse[0].prop2, Q(secondResponse[1])]);  
    }).then(finalResponse => { 
    //Here I need firstResponse and secondResponse... meaby wrapped inside finalResponse 
    let response = { 
    prop1: finalResponse.firstResponse.prop1, 
    prop2: finalResponse.secondResponse.prop2 
    }; 
    deferred.resolve(response); 
}); 

return deferred.promise; 
+0

'deferred'オブジェクトはここでは実際には不要です。中間値の一部はafaikですが、 – Sirko

関連する問題