UNPKG

google-closure-library

Version:
45 lines (40 loc) 1.26 kB
/** * @license * Copyright The Closure Library Authors. * SPDX-License-Identifier: Apache-2.0 */ /** * @fileoverview Provides utility functions for promises. */ goog.module('goog.async.promises'); /** * Resolves when all promise values in the map resolve. The resolved value will * be a Map with the same keys as the input map, but with the resolved values of * the promises. Rejects with first error if any promise rejects. Like * Promise.all(), but for Maps. * * @template OUT_VALUE := * mapunion(IN_VALUE, (V) => * cond(isTemplatized(V) && sub(rawTypeOf(V), 'IThenable'), * templateTypeOf(V, 0), * cond(sub(V, 'Thenable'), * unknown(), * V))) * =: * @template KEY * @template IN_VALUE * * @param {!Map<KEY, IN_VALUE>} promiseMap * @return {!Promise<!Map<KEY, OUT_VALUE>>} */ exports.allMapValues = (promiseMap) => { // Maps return keys and values in insertion order, so these will match each // other. const keys = Array.from(promiseMap.keys()); const values = Array.from(promiseMap.values()); return Promise.all(values).then((results) => { const resultMap = new Map(); results.forEach((result, i) => resultMap.set(keys[i], result)); return resultMap; }); };