Promise.all () с l oop и сохранение результата в объекте JSON в Javascript одновременно - PullRequest
1 голос
/ 21 марта 2020

Я хочу, чтобы l oop прошел через список и выполнял вызовы одновременно, а не последовательно, и сохранил результат в 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)])

1 Ответ

1 голос
/ 21 марта 2020

Поместите тело for l oop в асинхронный обратный вызов c .map:

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

Можно также добиться этого с помощью .then, но это уродливее:

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