Old*_*zer 0 javascript promise typescript es6-promise
我在打字稿中有以下内容:
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...");
Run Code Online (Sandbox Code Playgroud)
我总是按以下顺序获得控制台输出:
Now proceeding to load...
CONNECTED
Connection pool created successfully
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何实现仅在所有活动完成后才执行最后一行代码?
您正在调用该(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;
}
})();
Run Code Online (Sandbox Code Playgroud)