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

标签 javascript node.js typescript q

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

我正在使用平面 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/

相关文章:

javascript - 如何将 DOM 对象绑定(bind)到 JS 对象

javascript - Bootstrap 模型有问题吗?

node.js - 从 lambda 向 sns 主题发布消息

javascript - QuickPay Node.js REST api

javascript - Angular 2 访问组件属性时出现问题

javascript - 如何使用 jquery 禁用页面上的所有链接和输入按钮

javascript - JS console.log 方法打印两次值

node.js - Powershell不显示gulp任务的值

typescript :类方法可以是另一个方法的装饰器吗?

angular - Ionic 2 - 加载 Controller 不起作用