首页 > 解决方案 > 异步等待不等待

问题描述

我在打字稿中有以下内容:

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

我做错了什么?如何仅在完成执行之前的所有活动之后才执行最后一行代码?

标签: javascripttypescriptpromisees6-promise

解决方案


您正在调用该(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;
  }
})();


推荐阅读