Возвращает ли `return` в обратном вызове .then () из внутренней или внешней области видимости? - PullRequest
0 голосов
/ 10 апреля 2020

Возвращается ли строка 17 return из синей или красной области?

enter image description here

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Это не имеет ничего общего с обещаниями. Оператор return всегда возвращается из самой внутренней функции, в которой он находится.

Однако волхв c обещаний состоит в том, что возвращаемое значение обратного вызова then становится значение разрешения внешнего обещания, которое вы возвращаете из внешней функции.

0 голосов
/ 10 апреля 2020

Во-первых: пожалуйста, не публикуйте код как внедренные изображения, это затрудняет ответ.

Во-вторых: вы также можете ввести промежуточную переменную и написать свою функцию следующим образом:

canActivate() {
    const returnedPromise = this.authService.isAuthenticated()
        .then(this.processAuthenticationValue);

    return returnedPromise;
}


private processAuthenticationValue = (authenticated: boolean) => {
    if (authenticated) {
        return true;
    } else {
        this.router.navigate(['/']);
    }
}

Итак, вот что происходит: isAuthenticated() вызывается и возвращает обещание. then присоединяется в конце его цепочки обещаний (что then определено в методе processAuthenticationValue). То, что возвращается от canActivate, является всей цепочкой.

...