javascript - 调用异步函数 main 的正确方法?
问题描述
我有一些 nodejs 脚本 - 即完成工作并完成而不是连续运行的进程。
我使用异步函数,例如:
const mysql = require('mysql2/promise');
...
async function main() {
var conn = await mysql.createConnection(config.mysql);
...
var [response, error] = await conn.execute(`
DELETE something
FROM some_table
WHERE field = ?
`, [value]);
...
是以下代码:
main().then(() => process.exit(0)).catch(err => { console.error(err); process.exit(1); });
开始执行异步代码的最佳/正确方法?
(它有效,但我想确保我不会留下任何可能导致意外的漏洞,例如被默默吞下的异常。)
为什么conn.execute()
返回一个error
(我需要手动检查)而不是抛出一个?
解决方案
没有必要使用then
with ,async..await
因为它是then
.
入口点可以是async
IIFE (IIAFE):
(async () => {
try {
var conn = await mysql.createConnection(config.mysql);
...
var [response] = await conn.execute(`
SELECT something
FROM some_table
WHERE field = ?
`, [value]);
...
process.exit(0);
} catch (err) {
console.error(err);
process.exit(1);
}
})();
process.exit(0)
如果连接已关闭,也可能不需要。
为什么 conn.execute() 返回错误(我需要手动检查)而不是抛出错误?
启用 Promise 的函数在结果中返回错误不会,也不是常规的。
基于回调对错误execute
使用错误优先回调。基于 Promise 的execute
不能抛出错误,因为它返回一个在出错时被拒绝的 Promise。
如文档所示,第二个元素是fields
而不是error
:
const [rows, fields] = await conn.execute('select ?+? as sum', [2, 2]);
它可能会返回被拒绝的承诺,如果发生错误,可以用try..catch
内部async
函数捕获。
推荐阅读
- python - In Python, if I type a=1 b=2 c=a c=b, what is the value of c? What does c point to?
- excel - Find similar cells in a row and replace with cell next to it
- python - 如何从不同目录导入同名的python模块?
- c - 如何在不使用 OpenSSL 函数的情况下将 XCert 许可证文件中的 SubjectName 和 Issuer 转换为 C 中的字符串
- php - 使用 Laravel 会话和表的 Wordpress 身份验证
- mongodb - 使用 $elemMatch 查询数组索引
- java - abstract class inside static block usage
- c - 2D array not updating even after rewriting elements right after
- android - 允许更新特定用户的特定字段 - Firebase Firestore 规则
- python - gzip.open("file.tar.gz", "rb") vs. tarfile.open("file.tar.gz"); extractall()