我刚刚过渡到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
我想我已经理解了要点:
在函数定义之前添加async
将确保返回的任何值都是promise
在调用await
函数之前添加async
会“暂停”程序,直到返回结果
包含的功能 await
在声明前也必须具有async
关键字(容器的任何“父”功能都不需要{{ 1}}关键字)
“依赖于等待”的声明应包装在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
块。