Node.js проблема в try-catch с then-catch - PullRequest
0 голосов
/ 06 марта 2020

Я пишу функцию try-catch, и внутри try я выполняю затем ловлю обещания. Хочу скинуть ошибку, попробуй-поймай, поймай. Я не знаю, как это объяснить. пожалуйста, просмотрите мой код, и вы поймете проблему здесь:

try {
  function().then(result =>{
    if(result){
      // do something
      function2().then(result =>{
        if(result){
        // do something
        }else{
        throw "bad request";
        }
       }).catch((error)=>{
        throw error
       })
    }else{
      throw "not found";
    }
  }).catch(error =>{
    throw error
  });
}catch (error){
  callback(BAD_REQUEST);
}

Могу я сделать это или нет, или есть другой способ сделать это?

Ответы [ 3 ]

0 голосов
/ 06 марта 2020

.then получает функцию обратного вызова. Чтобы поймать ошибку, вы должны поместить try-catch внутри .then callback.

Что делать?

Чтобы поймать ошибку обещания, вы можете использовать .catch() или используйте современный async / await.

0 голосов
/ 06 марта 2020

Если я понял вашу точку зрения, вы можете использовать await / asyn c ( проверить это руководство ).

try {
  firstResult = await function1();
  if(firstResult) {
    secondResult = await function2();
    if(secondResult){
       //do something
    }
    else {
       throw "bad request"
    }
  }
  else {
    throw "not found"
  }
}
catch (err) {
   callback(err)
}

Это то, что вы хотите сделать?

0 голосов
/ 06 марта 2020

У вас неправильное представление о том, как работают Promises.

Когда вы вызываете Promise, это асинхронный вызов, основной поток не знает, когда он завершится sh. По этой причине вы должны использовать «then ()», чтобы код выполнялся всякий раз, когда заканчивается обещание.

По той же причине вы не можете отловить ошибку, которую не знаете, когда это произойдет. Итак, этот блок try-catch на самом деле ничего не делает.

Что делать? Ну, если вам нужно знать, как заканчивается это обещание, вы можете использовать оператор await.

Кроме того, у вас может быть глобальный прослушиватель ошибок (зависит от используемой платформы и языка), но это Другой вопрос.

...