RSVP га sh с ванильными обещаниями - PullRequest
0 голосов
/ 20 февраля 2020

RSVP lib имеет га sh обещаний помощник, который позволяет "извлекать" ссылки на обещания:

var promises = {
  posts: getJSON("/posts.json"),
  users: getJSON("/users.json")
};

RSVP.hash(promises).then(function(results) {
  console.log(results.users) // print the users.json results
  console.log(results.posts) // print the posts.json results
});

Есть ли способ сделать такая вещь с ванильными обещаниями (в современных ES)?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Это не сложно реализовать.

async function hash(promiseObj) {
  // Deconstitute promiseObj to keys and promises
  const keys = [];
  const promises = [];
  Object.keys(promiseObj).forEach(k => {
    keys.push(k);
    promises.push(promiseObj[k]);
  });
  // Wait for all promises
  const resolutions = await Promise.all(promises);
  // Reconstitute a resolutions object
  const result = {};
  keys.forEach((key, index) => (result[key] = resolutions[index]));
  return result;
}

hash({
  foo: Promise.resolve(8),
  bar: Promise.resolve(16),
}).then(results => console.log(results));
0 голосов
/ 20 февраля 2020

OOTB? Нет, есть только Promise.all, но он принимает массив, а не словарь. Но вы можете создать вспомогательную функцию, которая принимает словарь обещаний, преобразует в массив, запускает на нем Promise.all и обрабатывает его еще одним then, преобразуя массив результатов обратно в словарь.

...