javascript - 在 JavaScript 中异步创建独特的对象属性是否安全?

标签 javascript node.js async-await

以下代码是否以正确的方式构造“共享”对象?

const shared = {};
const createUniqueField = async (value) => {
  shared[value] = await getDataFromSomeService(value);
};
await Promise.all(someArrayWithUniqueValues.map(value => createUniqueField(value)));

如果没有,有哪些替代方法?

最佳答案

这取决于您所说的“安全”和“正确”的含义,但以下方法可能更适合:

const mapDataToValue = async (value) => {
  const data = await getDataFromSomeService(value);
  return { [value]: data };
};
const pairs = await Promise.all(someArrayWithUniqueValues.map(mapDataToValue));
const shared = pairs.reduce((merged, pair) => ({ ...merged, ...pair }), {});
  • 无副作用,
  • 最终不能陷入 shared 的状态是“半成品”(您的方法也可能不是这种情况,具体取决于您如何处理可能的错误)。

关于javascript - 在 JavaScript 中异步创建独特的对象属性是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65919514/

相关文章:

c# - 异步文件保存等待不 "Await"

javascript - 将 Canvas base64 图像上传到 parse.com 时图像链接损坏

javascript - 有没有办法使用 Nodejs 从 Swagger 文件中检索所有参数(甚至嵌套或数组中的参数)?

node.js - Node/Express 文件上传

javascript - Electron 中两个渲染器进程之间的通信

javascript - 如何将参数传递给 page.evaluate?

c# - WCF 客户端阻止异步方法

javascript - Jquery - 如果子元素没有文本,如何删除父元素?

javascript - 如何减少 eCharts 的填充?

javascript - 通过AJAX加载jsrender模板时出错