【问题标题】:asynchronous function work like synchronous [duplicate]异步函数像同步一样工作[重复]
【发布时间】:2021-08-05 14:10:40
【问题描述】:

我会尽量简单,当我想在函数 (SetLogs) 中执行异步查询时,我会在所有通话结束时在日志中看到我的 console.log('query 1 log'),而不是在 console.log('start log '); 之间看到他和console.log('return pool logs'); 我有两部分:

我的主要任务

logs.SetLogs(pool, req, res).then(bResultLog=> {
    console.log('return pool logs');
})

console.log("END")
return pool

设置日志功能:

static async SetLogs(pool, req, res) {
  
    var now = new Date();
    var endpoint = req.originalUrl.split("?")[0].replace("/", "")

    var query = "INSERT INTO LOGS_PORTAIL (ENDPOINT, TYPE, DATE_HEURE_LOGS, LOGIN) VALUE ('" + endpoint + "','" + req.method + "','" + now.toISOString().slice(0, 19).replace('T', ' ') + "','" + 'API' + "')";
    
    console.log('start log ');
    
    pool.query(query, function(err, results) {
        console.log('query 1 log ');
        return true
    });
    
    console.log('fin log ');

}

这是我的日志:

start log
fin log
END
return pool logs
query 1 log

【问题讨论】:

标签: javascript asynchronous callback


【解决方案1】:

正如我上面所说,您缺少awaithttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

async function SetLogs() {
 
    var now = new Date();
    console.log('start log');
    
    var res = await queryTest();
    console.log(res);
    console.log('fin log');
}

function queryTest() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('foo');
    }, 300);
  });
}

SetLogs();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 2021-11-07
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多