我在TypeScript Promise上调用了then(),但它仍处于待处理状态。为什么是这样?我该如何解决?

时间:2019-06-25 20:24:48

标签: javascript typescript promise

这是我正在运行的index.ts脚本(基于我在reddit上发现的内容):

const path = require("path");
const sql = require("mssql");
const config = require(path.resolve("./config.json"));

let db1;

const connect = () => {
    return new Promise((resolve, reject) => {
        db1 = new sql.ConnectionPool(config.db, err => {
            if (err) {
                console.error("Connection failed.", err);
                reject(err);
            } else {
                console.log("Database pool #1 connected.");
                resolve();
            }
        });
    });
};

const selectProjects = async (name) => {
    const query = `
        select * from [Time].ProjectData where [Name] like concat('%', concat(@name, '%'))`;

    const request = new sql.Request(db1);
    const result = await request
        .input("name", name)
        .query(query);

    return result.recordset;
};

module.exports = {
    connect,
    selectProjects
};

connect().then(function() {
    console.log(selectProjects('General'));
}).catch(function(err) {
    console.log(err);
});

当我使用node index运行脚本时(当然,在编译之后),我在控制台中得到了它:

Database pool #1 connected.
Promise { <pending> }

然后脚本挂起。

1 个答案:

答案 0 :(得分:-2)

显然,await关键字创建一个隐式的promise;我不得不将最后一个函数调用更改为:

connect().then(function() {
    selectProjects('General').then(function(data) {
        console.log(data);      
    });
}).catch(function(err) {
    console.log(err);
});