为什么要重新定义变量而不在异步函数中引发错误

时间:2019-03-26 12:19:56

标签: javascript node.js asynchronous async-await

我的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 })
  }
}

但是问题是为什么我的代码没有在这里抛出错误。有人可以帮我理解这一点。

谢谢!

1 个答案:

答案 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