【发布时间】:2017-08-27 11:05:18
【问题描述】:
我想实现一个 JS 类,它使用 JS 承诺或生成器并行执行最多 N 个任务。类似的东西
class Executor {
constructor(numberOfMaxTasks) {
...
}
next(task) {
...
}
done(onDone) {
...
}
}
....
const executor = new Executor(2);
executor.next(task1).next(task2).next(task3).done(onDone);
task1 和 task 2 应该并行执行,而 task3 应该等到前面的任务之一完成。当所有任务完成时执行 onDone 回调。
我试图使用 Promise 来实现它,但我失败了。我是生成器的新手,目前不知道他们是否可以在这里提供帮助。这主要是为了学习目的,这就是为什么我不想使用任何第三方库,只是原生 JS。任何提示都会很棒,提前谢谢!
【问题讨论】:
-
您知道 JavaScript 不会并行运行代码,除非您生成 WebWorkers 或等效的 node.js,对吧? Promise 和其他异步内容允许您在后台运行非 JavaScript 内容(网络 IO 等)时运行代码。
-
请告诉我们你的尝试。
-
不要再对异步代码使用生成器了。向右转
async/await语法。 -
@Touffy 是的,你是对的。也许并行在这里不是最好的词。我对这个标题有点困惑:glebbahmutov.com/blog/run-n-promises-in-parallel。可能异步而不是并行会更好。
标签: javascript ecmascript-6 generator es6-promise