Передача значений через вложенные операторы then - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть функция, которая имеет следующий формат:

this.callPromiseFunction1(params)
.then(results1 => {
    if (results1.length > 2) {
        this.callPromiseFunction2(params)
        .then(results2 => {
            return results2.stuff;
        }).catch(reject);
    } else {
        return results1.stuff;
    }
})
.then(results3 => {
    this.callPromiseFunction3(someotherparams)
    //do stuff
}).catch(reject)

Моя проблема заключается в том, что если я введу условное выражение и вызову обещание в первом операторе then(), у меня возникнет проблема синхронизации и результаты3не определеноResults3 определяется, если я введу оператор else первого оператора then().

Как мне исправить эту проблему синхронизации и разрешить вложенные операторы и обещания then(), не переписывая мои обещания полностью и не заставляя ихработать вместе?Есть ли способ принудительно выполнить обещание в тогдашнем утверждении, прежде чем перейти к следующему then()?

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете решить эту проблему, вернув обещание. Если вы заметили, что в случае выполнения оператора if вашего кода вы ничего не возвращаете. Возврат обещания приведет к его вставке до следующей ссылки в цепочке обещаний. Кроме того, вам не нужно catch для этого, так как последний catch в самом конце будет обрабатывать это. Также хорошая идея сделать раннее возвращение. Вот как может выглядеть ваш код:

this.callPromiseFunction1(params)
  .then(results1 => {
    if(results1.length <= 2) return results1.stuff;
    return this.callPromiseFunction2(params)
      .then(results2 => results2.stuff);
  })
  .then(results3 => {
    this.callPromiseFunction3(someotherparams)
    //do stuff
  })
  .catch(reject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...