javascript – 使用await在try / catch块中声明一个const
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 使用await在try / catch块中声明一个const,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2430字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 使用await在try / catch块中声明一个const](/upload/InfoBanner/zyjiaocheng/820/3f2878d0dacc4acaa02fbec7eaee6c1b.jpg)
所以我现在有这个:
var item_id
try {
item_id =
await
(async function () {
// code
})();
} catch (error) {
}
但我更喜欢将item_id作为const.将await值赋给const的最佳方法是什么,因为该节点要求我处理promise promise
例如错误:
[0] (node:77118) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: details[Symbol.iterator] is not a function
[0] (node:77118) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
异步代码
await
(async function () {
const query = `
INSERT INTO item (list_id)
SELECT
?
FROM
list
WHERE
id = ?
AND
user_id = ?
LIMIT 1;
`
const results =
await
doQuery({
inputs: [
list_id,
list_id,
req.session.user.id
// 10
],
query,
error_message: "item create mysql error"
})
return results.insertId === 0 ? false : results.insertId
})();
doQuery
function doQuery({ query, inputs, error_message, res = null }) {
return (
new Promise(function (resolve, reject) {
db.query(query, inputs, function (err, results, fields) {
if (err) {
console.trace(chalk.green(db.sql))
console.log()
handleError({ error: err, error_message, res })
reject(err)
return
}
resolve(results)
})
})
)
}
的HandleError
function handleError({ error, message, res }) {
console.trace(chalk.yellow(message))
console.trace(chalk.red(error))
console.log()
if (res) {
res.send({
error: true,
success: false,
})
}
}
解决方法:
这是一个众所周知的问题,已在别处讨论过.
您的选择包括:
>只需像你所做的那样在外层声明item_id.没有错.
>根据你想用item_id做什么,在try / catch块里面做,允许你声明const item_id;在试试里面.
>确保你真的需要一个尝试/捕获.请记住,异步函数中抛出的任何错误都将自动转换为对函数返回的promise的拒绝.你不必(并且在某些情况下不想)抓住它;相反,在更高级别处理错误.节点“要求您处理承诺拒绝”并不意味着您必须在此处处理它;你可以在任何更高级别处理它.请记住,在这里捕获错误会将异步函数放回“快乐路径”(除非你重新抛出)并且调用函数将无法知道有错误.
>在某些情况下,如果你回到使用promises和.catch(),你的代码将更具可读性
const item_id_promise = async function () {}();
item_id_promise.catch(...);
甚至可能只是
return (async function() { }()).catch(...)
但实际上你的问题与等待,异步或承诺无关.它只是块内变量的块范围,在这种情况下是一个try块.是的,const和let是块作用域的,因此限定为try子句.就像其他任何东西一样,如果你想在try块之外使用它们,你必须在try块之外声明它们.或者,如果你真的不想在try块之外声明它们,你不能在try块之外使用它们,所以你必须安排在它内部使用它们,如果可能的话.
内容总结
以上是互联网集市为您收集整理的javascript – 使用await在try / catch块中声明一个const全部内容,希望文章能够帮你解决javascript – 使用await在try / catch块中声明一个const所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。