Если я правильно понимаю, вы хотите, чтобы ваша функция разрешалась независимо от того, была ли у вас ошибка, или нет. Если это так, вы можете просто 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
}
Это то, что вы ищете?
Вам все еще нужно отлавливать ошибки, которые 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]