2017-08-25 57 views
1

我需要在Dart中反复调用异步函数,我们将其称为expensiveFunction,以获取可变数目的参数。但是,由于每次调用都非常耗费内存,所以我不能并行运行它们。我如何强制他们顺序运行?顺序处理飞镖中可变数量的异步函数

我已经试过这样:

argList.forEach(await (int arg) async { 
    Completer c = new Completer(); 
    expensiveFunction(arg).then((result) { 
    // do something with the result 
    c.complete(); 
    }); 
    return c.future; 
}); 

,但一直没有达到预期效果。对argList中的每个arg仍然并行调用expensiveFunction。我真正需要的是等待forEach循环,直到expensiveFunction完成,然后才能继续执行argList中的下一个元素。我怎样才能做到这一点?

回答

2

你要在这里使用了经典for循环:

doThings() async { 
    for (var arg in argList) { 
    await expensiveFunction(arg).then((result) => ...); 
    } 
} 

有一些很好的例子on the language tour

+0

这么简单...我为什么没有想到它?我设法通过递归来解决它,但是您的解决方案更加优雅。 –

+1

您也可以使用'Future.forEach(argList,expensiveFunction)'。 – lrn