在javascript中异步创建唯一对象属性是安全的吗?



是构造"共享的"对象的正确方式?

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"半建成"的状态;(你的方法可能也不是这样,这取决于你如何处理可能的错误)。

最新更新