以下代码是否以正确的方式构造“共享”对象?
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/