我创建了一个 Promise 函数来处理一个长时间的查询任务。有时该任务会阻塞数小时。我想设置一个时间来停止任务。下面是代码。
它可以正确返回错误消息,但在停止之前它仍在运行 connection.execute() 很长时间。那么如何在它返回拒绝消息时立即停止它呢?
谢谢!
function executeQuery(connection, query) {
return new Promise((resolve, reject) => {
"use strict";
//long time query
connection.execute(query, function (err, results) {
if (err) reject('Error when fetch data');
else resolve(results);
clearTimeout(t);
});
let t = setTimeout(function () {
reject('Time Out');
}, 10);
})
(async () => {
"use strict";
oracle.outFormat = oracle.OBJECT;
try {
let query = fs.readFileSync("query.sql").toString();
let results = await executeQuery(connection, query);
console.log(results.rows);
} catch (e) {
console.log(`error:${e}`);
}