【发布时间】:2019-01-19 18:50:05
【问题描述】:
我有一个获取文件内容的异步函数,如下所示:
async function getFile (name) {
return new Promise(function (resolve, reject) {
fs.readFile(`./dir/${name}.txt`, 'utf8', function (error, file) {
if (error) reject(error)
else resolve(file)
})
})
}
我将该函数调用到控制台日志中
getFile('name').then( console.log )
如果我犯了错误,比如文件名拼写错误,我会收到这个方便的错误:
(node:17246) UnhandledPromiseRejectionWarning: Unhandled promise
rejection. This error originated either by throwing inside of an async
function without a catch block, or by rejecting a promise which was not
handled with .catch(). (rejection id: 1)
我可以通过这样做来解决它:
getFile('name').then( console.log ).catch( console.log ) 但是有没有办法处理回调中的错误?也许是一次尝试?我该怎么做?
【问题讨论】:
-
干脆别打电话
reject?弄清楚error要做什么,然后把它放在readFile里面? -
“处理回调中的错误”是什么意思?更具体地说,当出现错误时,您希望发生什么:让名为
getFile的代码处理它还是返回其他内容? -
@kirbuchi 理想情况下,该函数没有副作用,例如记录错误。它会做一件事,一件事只返回一个文件或返回一个错误。
-
@Costa 这正是它的作用,返回错误。当您不处理它时,您会收到一个有用的未处理拒绝警告。如果您想处理它但不记录它,请使用
.catch(err => { /* ignore */ })而不是.catch(console.log)。 (当然是等效的async/await代码)。
标签: javascript async-await try-catch