2016-12-29 6 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

объект 'offferred' на самом деле здесь не нужен, как и некоторые из промежуточных значений afaik, – Sirko