Как отловить ошибку обратного вызова с помощью try catch?

Заглавие User ...

User.create({name: 'samir...
0
задан Costa 19 January 2019 в 05:54
поделиться

2 ответа

Если я правильно понимаю, вы хотите, чтобы ваша функция разрешалась независимо от того, была ли у вас ошибка, или нет. Если это так, вы можете просто resolve в любом случае:

async function getFile (name) {
  return new Promise(function (resolve, reject) {
    fs.readFile(`./dir/${name}.txt`, 'utf8', function (error, file) {
      if (error) resolve(error)
      else resolve(file)
    })
  })
}

Тогда вам придется обрабатывать ошибки снаружи, например,

getFile('name')
  .then(getFileOutput => {
    if (getFileOutput instanceof Error) {
      // we got an error
    } else {
      // we got a file
    }
  })

или

const getFileOutput = await getFile('name');
if (getFileOutput instanceof Error) {
  // we got an error
} else {
  // we got a file
}

Это то, что вы ищете?

0
ответ дан kirbuchi 19 January 2019 в 05:54
поделиться

Вам все еще нужно отлавливать ошибки, которые rejected.

Я думаю, что именно отсюда вы вызываете свою функцию getFile - ее нужно заключить в блок try/catch

try {
  const result = await getFile('name')
} catch(e) {
  ... You should see rejected errors here
}

Или, я думаю, это подойдет для вашего примера:

await getFile('name').then( console.log ).catch(e => {...})

Тестирование этого в консоли Chrome DevTools:

async function test () {
  return new Promise(function(resolve, reject) {
    throw 'this is an error';
  })
}

И вызов его через следующее:

await test().catch(e => alert(e))

Показывает, что это действительно работает! [ 1112]

0
ответ дан Bergi 19 January 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: