У меня есть такой код:
source$.pipe(
exhaustMap(input => ajaxPost1(input)), // ajaxPost1 returns ajaxObservable
tap(console.log), // can print HTTP response
exhaustMap(({result}) => ajaxPost2(result)), // ajaxPost2 returns promise
tap(console.log), // print nothing sometimes even if promise has been resolved and I don't know why
)
.subscribe(...);
и ajaxPost2
на самом деле функция с именем handlePrecheck
, например:
handlePrecheck(precheckResponse) {
const {response, request} = precheckResponse;
if (!response.status) {
this.displayInfo(response.msg);
return Promise.resolve(null);
}
// 早退时,签到流程是否继续由UI决定
if (response.isEarlyCheckout) {
// const a = this.confirmEarlyCheckout(precheckResponse);
// window.a = a;
// console.log(a);
// return a;
return this.confirmEarlyCheckout(precheckResponse);
}
if (response.holidayToCancel && response.holidayToCancel.id) {
const {id, duration} = response.holidayToCancel
this.confirmCancelHoliday(request.body.get('picture'), duration, id);
// 当有假期时总是终止签到过程
return Promise.resolve(null);
}
return Promise.resolve(precheckResponse);
}
И this.confirmEarlyCheckout
метод, который возвращает обещание, которое вскоре будет решено в соответствии с событием пользовательского интерфейса (я могу подтвердить это, проверив объект обещания в инструменте dev).
handlePrecheck
не будет передавать значение в нисходящий поток только тогда, когдаон входит в ветку if(response.isEarlyCheckout)
, но хорошо работает, когда входит в другие ветви и возвращает обещание.
Очень признателен, если кто-нибудь может помочь.