Node / MongoDB异步等待场景中的UnhandledPromiseRejectionWarning

时间:2018-11-13 12:04:29

标签: javascript node.js mongodb express async-await

我刚刚过渡到async / await,并且正在从这些资源中学习:

https://javascript.info/async-await

https://medium.com/@rafaelvidaurre/truly-understanding-async-await-491dd580500e

https://hackernoon.com/understanding-async-await-in-javascript-1d81bb079b2c

我想我已经理解了要点:

  1. 在函数定义之前添加async将确保返回的任何值都是promise

  2. 在调用await函数之前添加async会“暂停”程序,直到返回结果

  3. 包含的功能 await在声明前也必须具有async关键字(容器的任何“父”功能都不需要{{ 1}}关键字)

  4. “依赖于等待”的声明应包装在async / try块中

因此,我认为理想的catch / async方案如下所示:

await

我正在尝试通过以下代码将其合并到应用程序中:

async function thisWillTakeAges() {

    // query a database, fetch external content etc
    return desired_value;

}


async function iLoveProgramming() {

    try {
        var desired_value = await thisWillTakeAges();
    } catch (err) {
        console.log(err);
        return;
    }

    // do things with 'desired_value' once it has been returned

}

我收到此错误:

  

(节点:14484)UnhandledPromiseRejectionWarning:错误:   secretOrPrivateKey必须有一个值

所以有两个问题:

  • 为什么会出现此错误?
  • 当我确实有一个function get_reset_password_secret(reset_password_user_id) { // ... collection.findOne(query, options, async function(err, result) { if (err) { res.send(err); } else { if (result !== null) { // .. return secret; } } }); } // middleware const api_resource_get = async (req, res) => { // ... try { var secret = await get_reset_password_secret(reset_password_user_id); } catch (err) { console.log("error here at api_resource_get(): " + err); } var forgotten_password_token = jwt.sign({ user_email: user_email }, secret); // ... } // route handler app.route("/api/:api_version/resource") .get(api_resource_get); / try块(不是控制台记录错误)时,为什么程序会指出错误未得到解决?

关于第一个问题,也许是因为catch之前还需要get_reset_password_secret()关键字吗?

关于第二个问题,我不确定为什么无法识别async块。

0 个答案:

没有答案