我有一个进程有两个数据库调用,需要按顺序进行。最后,我需要将最后两个响应合并为一个响应。
我正在使用平面 promise 链接,并且我不知道如何返回当前和先前的 promise 。
我有这样的东西:
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 编写的。我删除了很多代码来做一个关于我寻找的简单示例。
最佳答案
您可以同时返回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;
关于javascript - 如何使用 Q 保留对 promise 链的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386813/