javascript - 异步等待不等待
问题描述
我在打字稿中有以下内容:
import sql = require("mssql");
const config: sql.config = {....
}
const connect = async() => {
return new Promise((resolve, reject) => {
new sql.ConnectionPool(config).connect((err) => {
if (err) {
reject(err);
} else {
console.log("CONNECTED");
resolve();
}
});
});
};
(async() => {
await connect().then(
() => {
console.log("Connection pool created successfully.");
}).catch((err) => {
console.error(err);
});
})();
console.log("Now proceeding to load...");
我总是按以下顺序获得控制台输出:
Now proceeding to load...
CONNECTED
Connection pool created successfully
我做错了什么?如何仅在完成执行之前的所有活动之后才执行最后一行代码?
解决方案
您正在调用该(async () => {...
函数,这是异步的,然后直接继续打印加载消息。
你也在混合、匹配.then().catch()
和async/await/catch
错误处理——我会重构这样的东西:
import sql = require("mssql");
const connect: (config: sql.config) => Promise<sql.ConnectionPool> = async config =>
new Promise((resolve, reject) => {
const pool = new sql.ConnectionPool(config);
pool.connect(err => {
if (err) return reject(err);
console.log("CONNECTED");
resolve(pool);
});
});
const config: sql.config = {
/*...*/
};
(async () => {
console.log("Now proceeding to load...");
try {
const pool = await connect(config);
console.log("Connection pool created successfully.");
} catch (e) {
console.error(e);
return;
}
})();
推荐阅读
- oracle - 有没有办法在游标循环中使用函数将值插入表?
- python - 从蒙特卡罗添加多个模拟值
- javascript - 如何修复 JavaScript 中的“意外标识符”
- python-3.x - 为什么对列表列表的迭代不起作用?
- bitbucket - 复选框不适用于 Bitbucket 中的降价
- css-transitions - 转换停止使用 fullpage.js
- java - 运行 savina 代码 https://github.com/shamsimam/savina
- java - 如何在 JAVA 中使用 JAXB 正确生成 XML
- python - 如何根据状态用 Python 总结范围?
- vscode-settings - 如何在调试模式下更改当前断线颜色?