【问题标题】:How can I make in NodeJS Async Buffer如何在 NodeJS 异步缓冲区中制作
【发布时间】:2020-12-27 13:15:29
【问题描述】:

我搜索、搜索并没有找到异步 Buffer.from()。 我有 for 循环,其中有 Buffer.from(),一切正常,但是这个 Buffer 让我睡了 100-300 毫秒,不幸的是,情况并非如此。 你有解决办法吗?

// 编辑

await group.getIcon() - 返回承诺缓冲区,我需要这个到 base64。

这样的代码:

try {
    groupIcon = Buffer.from(await group.getIcon()).toString("base64");
} catch (error) {
    console.log("Not found icon");
}

有人知道 npmjs.com 上的库,因为它是异步发生的吗?

它是我需要转换为 base64 的函数。 https://multivit4min.github.io/TS3-NodeJS-Library/classes/teamspeakservergroup.html#geticon

【问题讨论】:

  • 如果您需要转换大量图标,请尝试考虑工作线程。
  • 所有繁重的同步计算都应该从主(和单!)线程中删除。

标签: node.js asynchronous


【解决方案1】:

缓冲区是同步的。您可以将该缓冲区修改几片,但如果没有非常大的缓冲区,我不建议这样做。这可能很难处理,我认为这对您的问题来说不是一个好习惯。我有一个更好的想法和建议来加快你的功能。

如果您没有充分的理由等待循环,请不要这样做。 我不知道你的代码到底在做什么,但我猜你可以修改你的代码,如下所示以获得更好的性能。

let yourFunc = async () => {
  /** Some codes about groups array */
  const groups = await getGroups();
  const iconPromises = [];
  for (let group of groups) {
    try {
      iconPromises.push(group.getIcon());
    } catch (error) {
      console.log('Not found icon');
    }
  }
  //Or you can use Promise.allSettled for better error handling
  const icons = await Promise.all(iconPromises);
  const groupIcons = icons.map(icon => Buffer.from(icon).toString('base64'));
  /** then do whatever you want  */
}

【讨论】:

  • 我需要为组提供缓冲区,因为我需要更新/插入 mongodb :/
猜你喜欢
  • 2017-04-20
  • 2015-11-15
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多