【发布时间】:2021-08-29 03:43:17
【问题描述】:
我有一个异步函数,我想从中止正在后台运行的进程。 中止不需要取消异步函数内部当前未决的任何承诺。 它只需要使函数返回并防止任何进一步的行被执行。 我怎么能这样做? 当前代码不起作用,因为错误是在 setInterval 而不是 try 块中引发的。
setInterval(() => { //background proccess
abort();
}, 5000);
async function func() {
try {
abort = function thr() {
throw new Error("dsaf");
};
await new Promise((r) => setTimeout(r, 10000));
await new Promise((r) => setTimeout(r, 10000));
await new Promise((r) => setTimeout(r, 10000));
await new Promise((r) => setTimeout(r, 10000));
await new Promise((r) => setTimeout(r, 10000));
await new Promise((r) => setTimeout(r, 10000));
await new Promise((r) => setTimeout(r, 10000));
} catch {
console.log("caught");
}
}
func()
更新:是否有其他语言更好地支持这种类型的模式,或者所有语言都这样?
【问题讨论】:
-
这里至少有一个很大的误解。
setInterval不是后台进程。此外,所有等待的承诺都不会中止。 -
我不知道术语是否正确,但它是一个始终运行而不返回的函数。
-
javascript 中不存在“一直运行而不返回”的功能。
标签: javascript node.js promise cancellation