2016-12-29 63 views
0

我有一個進程有兩個數據庫調用,需要按順序。最後,我需要將最後兩個響應合併到一個響應中。如何保留響應與承諾鏈接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