【问题标题】:async parallel Limit crashing异步并行限制崩溃
【发布时间】:2021-08-27 11:46:36
【问题描述】:

我正在尝试使用异步并行限制,但每次我使用它似乎都停止了。 并且在第一次迭代后不继续。我希望它一直持续到数组完成我该怎么做?

const parallelLimit = require("async/parallelLimit");
async function publishMessage(data) {
  const messageId = await pubSubClient
    .topic(topicName)
    .publishJSON(data)
    .catch((err) => console.log(err));
  console.log(messageId);
}
messages = messages.flat();
        let promises = messages.map((row) => {
          return () => publishMessage(row);
        });
        
        await parallelLimit(promises, 4000);

【问题讨论】:

  • 什么是publishMessage
  • 没有返回函数有回调参数?我猜你应该在异步计算完成时调用。
  • 添加了发布消息@ikhvjs

标签: javascript asynchronous async-await parallel-processing


【解决方案1】:

您需要将一组异步函数传递给 parallelLimit()。

const parallelLimit = require("async/parallelLimit");

function publishMessage(data) {
  return async function () {
    try {
      const messageId = await pubSubClient.topic(topicName).publishJSON(data);
      console.log(messageId);
    } catch (err) {
      throw err;
    }
  };
}

const asyncFuncs = messages.flat().map(row => publishMessage(row));

(async function run() {
  try {
    await parallelLimit(asyncFuncs, 4000);
  } catch (err) {
    console.log(err);
  }
})();

【讨论】:

  • 我刚刚使用了你的代码,我得到了这个错误错误:期望一个函数在 wrapAsync (/node_modules/async/internal/wrapAsync.js:27:46) 我已经插入了一个异步数组功能
  • @Oas,你的方法只是传递一个同步函数,而不是一个异步函数。从您的错误消息中,您是否复制了我的publishMessage() 代码?如果可能的话,请给我看看你的代码。
  • 啊,好吧,当我复制你的代码时我犯了一个错误,我把它作为一个异步函数我解开了并行限制,现在它工作正常。谢谢。为您提供帮助
猜你喜欢
  • 2017-12-22
  • 1970-01-01
  • 2018-01-12
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多