如何使用 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;
我有一个进程有两个数据库调用,需要按顺序进行。最后,我需要将最后两个响应合并为一个。
我正在使用平面承诺链,但我不知道 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;