如何使用 Q 保留对 promise 链接的响应

How retain responses on promise chaining with Q

我有一个进程有两个数据库调用,需要按顺序进行。最后,我需要将最后两个响应合并为一个。

我正在使用平面承诺链,但我不知道 return 当前和以前的承诺如何。

我有这样的东西:

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:这是在 TypeScript 中。我删除了很多代码来做一个关于我正在寻找的简单示例。

您可以 return 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;