Ich erstelle eine Versprechen-Funktion zur Verarbeitung einer langfristigen Abfrage-Aufgabe. Irgendwann wird die Aufgabe für Stunden blockiert. Ich möchte eine Auszeit einstellen, um die Aufgabe zu stoppen. Unten ist der Code.Knoten js stoppen lange Prozess-Aufgabe, wenn Promise es ablehnt
Es kann Fehlermeldung korrekt zurückgeben, aber es läuft immer noch connection.execute() für lange Zeit, bevor zu stoppen. Also wie kann man es sofort stoppen, wenn es eine abweisende Nachricht zurückgibt?
Danke!
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}`);
}
"* es läuft noch connection.execute() *" - Nun, Sie müssen eine Möglichkeit, um diesen Vorgang abzubrechen. Bietet die Bibliothek, die Sie verwenden, das? Wenn nein, haben Sie grundsätzlich kein Glück. Aber sagen Sie uns doch, welche Bibliothek es ist, damit wir Ihnen helfen können, eine Lösung zu finden. – Bergi
Beenden Sie einfach Ihre Knoten Aufgabe mit 'process.exit' im Falle eines Fehlers, wenn Sie alles abbrechen wollen – Bergi
@Bergi: Kill Ihren Prozess jedes Mal, wenn eine Abfrage fehlschlägt? Das klingt nach einer Verweigerung des Dienstes an dir selbst. – arboreal84