Javascript 异步任务的可停止序列

Javascript 异步任务的可停止序列,javascript,asynchronous,Javascript,Asynchronous,实现异步任务的可停止列表的最佳方法是什么? 任务的数量不是固定的 我已经找到了一种方法,但我想知道是否有更好的方法来实现这样的事情。而且代码看起来相当脏,这让我觉得这可能不是解决问题的办法。 主要问题是: 检测何时请求任务结束 能够执行一系列异步函数,并有可能在某一点退出流程,而不管剩下的任务是什么 对于问题(2),我找到了一个不错的方法,即使用。向回调的错误参数发送值会导致所有进程停止。 下面是第(1)部分的脏部分。为了实现这一点,每个任务都必须侦听对象中的值更改(让我们停留,序列的状态)

实现异步任务的可停止列表的最佳方法是什么? 任务的数量不是固定的

我已经找到了一种方法,但我想知道是否有更好的方法来实现这样的事情。而且代码看起来相当脏,这让我觉得这可能不是解决问题的办法。 主要问题是:

  • 检测何时请求任务结束
  • 能够执行一系列异步函数,并有可能在某一点退出流程,而不管剩下的任务是什么
对于问题(2),我找到了一个不错的方法,即使用。向回调的错误参数发送值会导致所有进程停止。
下面是第(1)部分的脏部分。为了实现这一点,每个任务都必须侦听对象中的值更改(让我们停留,序列的状态),以便检测何时需要退出流程

因此,实现的原型如下所示:

让sequenceState=新代理(
{
停止:错误,
顶部:()=>{}
},
{
设置:功能(目标、道具、值){
如果(道具==“停止”){
target.stopped=值;
如果(值)
target.onStop();
}否则{
目标[prop]=价值;
}
}
}
);
函数停止(){
sequenceState.stopped=true;
}
函数task1(回调){
console.log(“任务1…”);
let to=setTimeout(()=>{
控制台日志(“2000毫秒后完成”);
回调();
}, 2000);
sequenceState.onStop=()=>{
清除超时(to);
回调(true);
};
}
函数task2(回调){
console.log(“任务2…”);
let to=setTimeout(()=>{
控制台日志(“3000毫秒后完成”);
回调();
}, 3000);
sequenceState.onStop=()=>{
清除超时(to);
回调(true);
};
}
异步瀑布(
[
任务1,
任务2
],
功能(错误、结果){
控制台日志(“任务结束”);
});
设置超时(()=>{
日志(“2500毫秒后停止!”);
停止();
}, 2500);

这实际上是我见过的一种更容易理解的实现方法。@Pogrindis是的,现在我真的认为这是一种不错的方法。我不知道您何时看到我的问题,但我使用Object.setProperty观察sequenceState对象。现在有了代理,代码看起来好多了。