rxjs6 не передает значение в обещании в трубе - PullRequest
0 голосов
/ 23 октября 2019

У меня есть такой код:

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), но хорошо работает, когда входит в другие ветви и возвращает обещание.

Очень признателен, если кто-нибудь может помочь.

1 Ответ

0 голосов
/ 23 октября 2019

Хорошо ... Я выяснил причину ... Я отписываюсь source$ при ожидании события пользовательского интерфейса для разрешения Promise, поэтому разрешенное значение Promise не будет передано в нисходящий поток

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...