小编Gre*_* A.的帖子

能够中止异步调用

我正在使用带有es7风格的异步/等待方法的babeljs.我有一个主脚本,它将在所有返回promises的对象数组上调用异步方法.我使用Promise.all()等待所有这些返回,但是,这些任务可能需要很长时间,如果它们超过阈值,我想中止所有这些,并且任务以适当的方式处理.

反正有没有完成这样的事情?目前,我能想到的唯一方法是生成一个进程,该进程执行调用这些方法的工作并等待它们全部解决,如果达到时间限制,它可以终止进程并执行它需要的任何处理.

更新:关于主脚本正在等待的这些方法的一些说明......他们可能正在进行一系列的操作(调用外部系统,某些地方的流文件等)而不执行可以独立取消的单个操作.

更新#2:一些未经测试的半伪代码

class Foo1 {
    async doSomething() {
        // call some external system
        // copy some files
        // put those files somewhere else (s3)
    }
}
class Foo2 {
    async doSomething() {
        // Do some long computations
        // Update some systems
    }
}

class FooHandler {
    constructor() {
        this.fooList = [];
    }

    async start() {
        await Promise.all(this.fooList.map(async (foo) => {
            return await foo.doSomething();
        }));
    }
}

let handler = new FooHandler();

handler.fooList.push(new Foo1());
handler.fooList.push(new Foo2());

// if this …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js babeljs ecmascript-7

11
推荐指数
1
解决办法
5237
查看次数