Метод .then () игнорируется при использовании синтаксиса ES5 - PullRequest
0 голосов
/ 12 декабря 2018

Правильно ли работает этот код с функциями стрелок:

f0(value)
    .then(val1          => f1(val1))
    .then(val2          => f2(val2))
    .catch(error        => result.textContent = error)
    .then(()            => final.textContent = "Done");

Я пытаюсь создать версию, используя обычные функции, как показано здесь:

f0(value)
    .then(function(val1){    f1(val1) })
    .then(function(val2){    f2(val2) })
    .catch(function(error){  result.textContent = error })
    .then(function(){        final.textContent = "Done" });

Код, похоже, игнорируетлюбое отклоненное обещание, поэтому, если первое .then() отклонено, оно продолжает вызывать второе и так далее.

Этого не происходит в приведенном выше примере ES6.

Я допускаю некоторую синтаксическую ошибку?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Вы пропустили оператор return.
Эквивалент:

val1 => f1(val1)

:

function(val1){  return  f1(val1) }
0 голосов
/ 12 декабря 2018

Поскольку вы используете функцию сокращенной жирной стрелки в своей версии кода ES6, вам не нужно указывать оператор return, поскольку он неявно подразумевается в этом сценарии.

Поэтому при преобразовании его виспользуйте обычную функцию, тогда вам нужно указать оператор return на этот раз.

f0(value)
    .then(function(val1){ return f1(val1) })
    .then(function(val2){ return f2(val2) })
    .catch(function(error){ return result.textContent = error })
    .then(function(){ return final.textContent = "Done" });
0 голосов
/ 12 декабря 2018

Я думаю, у вас должен быть один метод then () и один метод catch () для обещания signle.Если вам нужно несколько обработчиков, попробуйте обернуть их в одну функцию.

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