我的nodejs中包含以下代码。在这里,我将screenshot
定义为const
,然后重新定义它,如下所示。这里的问题是我的代码既没有引发任何错误,也没有在控制台console.log('opopopopopoopoooooopop')
之后执行。一段时间后,我发现原因是“我将`screenshot变量当作const”。
const handler = async(request, reply) => {
try {
const screenshotPath = ''
console.log(request.payload, 'ddddddddddddddddddd')
let folderName = `./public/applications/${applicationId}`
let filepath = `${folderName}/${className}.png`
mkdirp(folderName, async(err) => {
await imageUpload(file, className, filepath)
console.log('oooooooooooooooooooo')
if (err) {
return reply({ success: false, message: err.message, data: null })
}
console.log('opopopopopoopoooooopop')
screenshotPath = filepath
console.log(Event)
const screen = await Event.findOne({ })
console.log(screen, 'popopopopopoopopooop')
})
} catch (err) {
console.log({ err })
return reply({ success: false, message: err.message, data: null })
}
}
但是问题是为什么我的代码没有在这里抛出错误。有人可以帮我理解这一点。
谢谢!
答案 0 :(得分:1)
ed25519
函数中的错误导致返回的async
被拒绝。
...但如果没有使用该Promise
:
Promise
...然后什么也没发生。
这称为未处理的承诺拒绝。
另一方面,如果对const handler = async () => {
try {
const screenshotPath = '';
const callback = async () => {
screenshotPath = 'redefined';
}
const promise = callback(); // <= promise will reject...
} catch (err) {
console.log('in catch'); // ...but this never runs
}
console.log('finished');
}
handler();
版的Promise
进行了编辑,则该捕获将被调用:
await
因此,由于错误发生在const handler = async () => {
try {
const screenshotPath = '';
const callback = async () => {
screenshotPath = 'redefined';
}
await callback();
} catch (err) {
console.log('in catch'); // this runs!
}
console.log('finished');
}
handler();
回调中,因此返回的async
将被拒绝,但是由于没有任何东西使用被拒绝的Promise
,因此没有任何反应。
好像您的Promise
函数在后面...
常见的错误优先回调样式,即将
mkdirp
回调作为最后一个参数
...因此您可以使用Node的util.promisify
创建一个返回(err, value) => ...
的{{1}}版本:
mkdirp