javascript – 如何并行运行生成器函数?

假设我有一个带有端点的Koa Web服务器,如下所示:

const perform = require(...); // some generator function

exports.endpoint = function* () {

    var results = yield getResults();

    // Respond the results
    this.body = results;
}

exports.getResults = function* () {

    var actions = [...];
    var results = [];

    for (var action of actions) {

        var result = yield perform(action);

        results.push(results);
    }

    return results;
}

现在,客户端将在所有操作显然执行后得到响应.但事情是每个动作都依赖于以前的完成.

有没有办法并行执行它们?

注意:将它们转换为Promises不是一个选项,除非我能以某种方式返回结果,而不是解析()它们.

解决方法:

co将生成器函数转换为Promises,并执行它们异步. Promise.all等待所有人完成:

exports.getResults = function* () {

    var actions = [...];

    return yield Promise.all(actions.map(function(action) { 
        return co(function*() { 
            return yield perform(action); 
        } 
    }));
}
上一篇:6. Koa中的错误处理


下一篇:3. koa-router