尽管异步/等待和Promise.all,Node.js函数也不会等待

时间:2020-07-10 06:36:51

标签: mysql node.js async-await

我完全不喜欢异步/等待。我尝试了多种方法,但无法获得所需的东西。这是情况:

async function mainfunction(){

var returned_result = [];

var client = mysql.createConnection(config);
    
client.connect(function(err){
    if(err){
      console.log('Error connecting to Db');
      client.end();}
});

var query_result = await client.query(sql, async function(err, rows) {

    ...

    var result = await secondFunction(client);

    ...

});

returned_result.push(query_result);
var returned_result_confirmation = await Promise.all(returned_result);
client.end();
return returned_result_confirmation;

}

我的目标是在调用client.end();之后等待secondFunction完成。但这不是这种方式。

你对我有什么指点吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以将整个内容包装成一个承诺:

var query_result = await new Promise((resolve, reject) => {
    client.query(sql, async function(err, rows) {
        ...
        secondFunction(client)
            .then(data => resolve(data))
            .catch(err => reject(err))
        ...
});

或(我猜不太好,但也可以做到)

var query_result = await new Promise((resolve, reject) => {
    client.query(sql, async function(err, rows) {
       ...
       resolve(await secondFunction(client))
       ...
});