使用异步和等待时出现问题。我正在执行两个查询,然后将结果保存到temp变量。收集了所有已执行查询的响应后,我会将其发送给客户端。
这是我当前的示例代码。
module.exports = (app) => {
app.get('/api/stats', (req, res) => {
let fetch1 = '';
let fetch2 = '';
conn.query('query here', [], async (error, results) => {
if (error) {
return res.send({
success: false,
message: 'There was an error.'
});
} else {
fetch1 = results;
}
});
conn.query('query here', [], async (error, results) => {
if (error) {
return res.send({
success: false,
message: 'There was an error.'
});
} else {
fetch2 = results;
}
});
// I need to wait until the queries have resolved so that I can send the correct data
return res.send({
success: true,
fetch1: fetch1,
fetch2: fetch2
});
});
};
基本上,我需要等到查询解决后才能向尾发送正确的数据。
谁能解释我如何使用等待和异步来完成此任务?
谢谢。
答案 0 :(得分:3)
您只能await
和Promise
,因此对于不返回Promises
的函数,您需要创建一个Promise
包装器。这需要在以前使用回调的每次调用中完成,但是您可以为每个需要包装的函数创建一个辅助函数。
function queryPromise(query, parameters) {
return new Promise((resolve, reject) => {
conn.query(query, parameters, (err, results) => {
if(err) {
reject(err);
} else {
resolve(results);
}
});
});
}
module.exports = (app) => {
app.get('/api/stats', async (req, res) => {
try {
let fetch1 = await queryPromise('query here', []);
let fetch2 = await queryPromise('query here', []);
res.send({
success: true,
fetch1: fetch1,
fetch2: fetch2
});
} catch {
res.send({
success: false,
message: 'There was an error.'
});
}
});
};
答案 1 :(得分:0)
据我所知,我通常将异步应用于函数,并对需要从特定数据库中获取的某些变量(在函数内部)执行等待。 因此,要将其实现到包含async标签的函数中,您可以执行以下操作:
fetch1 =等待结果; fetch2 =等待结果;
这将一直等到将数据附加到变量fetch1和fetch2上,然后再继续执行代码。
很抱歉,如果它含糊不清,希望对您有所帮助。