Разорвать цепочку обещаний, используя бросок - PullRequest
2 голосов
/ 16 марта 2020

Мне нужно проверить, присутствует ли пользователь в двух базах данных, и если нет, мне нужно создать нового пользователя.

Проверить, присутствует ли пользователь в базе данных 1. Если он присутствует, «пользователь существует» и перехватывает его, не выполняя остальную часть then ().

Проверьте, присутствует ли пользователь в базе данных 2. Если он присутствует, выведите «пользователь существует» и перехватите его без выполнение остальной части then ().

В противном случае создайте пользователя.

Я пытался разорвать цепочку обещаний. Вот сценарий. Итак, что я сделал, это

const promise = new Promise((resolve, reject) => {
       resolve(false); 

   }).then(value => {
         //check if user exists in table 1 and set value to True or False
         if (value==True){
             throw "User exists";
         }
         else{
              return value;
         }
   }).then(value=> {
      ////check if user exists in table 2 and set value to True or False
      if (value==True){
             throw "User exists";
         }
         else{
              return value;
         }
   }).catch(err => {
           console.log(err);
       });

Вот как это выглядело кратко.

Но это не останавливает выполнение операторов then (), даже если я выбрасываю сообщение. Он продолжает выполнять весь код, даже если пользователь найден.

А также показывает нижеприведенное и останавливает все выполнение.

                    throw 'user found'
                    ^

Примечание: есть кое-что, что я должен сделать с пользовательскими значениями после их получения. Так что казнь не должна быть остановлена.

1 Ответ

2 голосов
/ 16 марта 2020

Вместо броска используйте return Promise.reject(new Error()). Кстати, если вы бросаете, вы должны throw new Error('message').

Но именно так следует обрабатывать ошибки, а не логи c выполнения кода.

checkIfUserExistsInDB1() //this must be a function returning a promise
  .then(user => {
    if (!user) return checkIfUserExistsInDB2() //this must be a function returning a promise
    else return Promise.resolve(user)
  })
  .then(user => {
    if (!user) return createUser() //this must be a function returning a promise
    else return Promise.resolve(user)
  })
  .then(user=> { do whatever you need more })
  .catch(err => { handle error }) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...