当前位置: 首页 > 面试题库 >

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

公冶桐
2023-03-14
问题内容

假设我有一台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;
}

现在,在所有动作都明显执行之后,客户端将获得响应。但事情是每个动作都取决于前一个动作的完成。

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

注意:除非我能以某种方式返回结果而不是resolve(),否则将它们变为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); 
        } 
    }));
}


 类似资料:
  • 问题内容: 我先研究了一下,却找不到答案。我试图在Python中并行运行多个函数。 我有这样的事情: 我想调用func1和func2并使它们同时运行。这些功能彼此之间或在同一对象上不相互作用。现在,我必须等待func1完成才能启动func2。我该如何执行以下操作: 我希望能够几乎同时创建两个目录,因为我每分钟都在统计要创建多少个文件。如果该目录不存在,将会拖延我的时间。 问题答案: 你可以使用th

  • 块状应用程序通常生成JavaScript作为其输出语言,通常在网页(可能是同一网页或嵌入式WebView)中运行。 像任何生成器一样,第一步是导入javascript生成器。 对于Web Blockly,请在blockly_compressed.js之后添加javascript_compressed.js: <script src="blockly_compressed.js"></script>

  • 问题内容: 我正在一个有几个无法更改的脚本的项目中。这些脚本通过AJAX更新页面。更新完成后,我需要运行一些代码。 XMLHttpRequest完成时是否会触发任何事件?(或任何XMLHttpRequest状态更改?)。 不幸的是,我无法访问用于发出请求的特定XMLHttpRequest对象。 谢谢, 问题答案: 如果没有jQuery,则可以挂钩该方法以在XHR对象被编辑时为每个XHR对象的事件附

  • 如何通过< code>ItextSharp合并多个pdf文件(运行时生成),然后打印它们。 我找到了下面的链接,但考虑到存储的pdf文件不是我的情况,该方法需要pdf名称。 我有多个报告,我将通过以下方法将它们转换为< code>pdf文件: 现在我想将所有生成的文件()合并到一个pdf文件中以打印它

  • 现在我们有一个项目,包含两个工作。1) 是带有单元测试的标准构建。2) 是集成测试。它们是这样工作的: 构建整个项目,运行单元测试,启动集成测试工作 问题是步骤2)现在需要一个多小时才能运行,我想将集成测试并行化,以便它们花费更少的时间。但我不确定我该怎么做。我的第一个想法是,我可以有两个这样的步骤: 构建整个项目,运行单元测试,启动集成测试工作 构建整个项目,将其部署到integration s