Promise.all()和循环,并将结果并发存储到Javascript中的JSON对象

Promise.all()和循环,并将结果并发存储到Javascript中的JSON对象,javascript,promise,async-await,Javascript,Promise,Async Await,我希望循环遍历一个列表并并发调用,而不是按顺序调用并将结果存储在JSON对象中 var keys = ["1", "2", "10", "11", "12", "19", "20"]; for (const key of keys) { JSON_OBJECT[key] = await ns_bundle.get(key, "json") } 使用Promise.all()有什么方法可以实现这一点吗 我已经完成了一些实现,但这样我就不得不不必要地编写太多的代码行 co

我希望循环遍历一个列表并并发调用,而不是按顺序调用并将结果存储在JSON对象中

var keys = ["1", "2", "10", "11", "12", "19", "20"];

for (const key of keys) {
            JSON_OBJECT[key] = await ns_bundle.get(key, "json")
}
使用Promise.all()有什么方法可以实现这一点吗

我已经完成了一些实现,但这样我就不得不不必要地编写太多的代码行

const JSON_OBJECT = {}
const [JSON_OBJECT.a, JSON_OBJECT.b] = await Promise.all([first(a), second(b)])

将for循环的
主体放入异步
.map
回调:

await Promise.all(
  keys.map(async key => {
    JSON_OBJECT[key] = await ns_bundle.get(key, "json");
  })
);
也可以通过
实现。然后
,但它更丑陋:

await Promise.all(
  keys.map(
    key => ns_bundle.get(key, "json")
      .then((result) => {
        JSON_OBJECT[key] = result;
      })
  )
);

还要注意的是。如果你有一个对象或数组,那么你有一个对象或数组,句号。JSON格式是一种用字符串表示对象的方法,如
constmyjson='{“foo”:“bar”}'
。如果不涉及字符串、序列化或反序列化,那么也不涉及JSON。最好使用比
JSON\u OBJECT
更合适的变量名。在两个代码块的表示中,这并不是一个公平的比较,因为您详细地格式化了第二个代码块(有很多额外的行)和第一个代码块(最少的行)。格式相似,两者之间不会有太大区别。