فهرست منبع

Add promiseMapSettledWithLimit utility

GitOrigin-RevId: e34102de17f28e43deb383d630088c6e753e2ec1
Andrew Rumble 1 سال پیش
والد
کامیت
d04bfbcdea
1فایلهای تغییر یافته به همراه17 افزوده شده و 0 حذف شده
  1. 17 0
      libraries/promise-utils/index.js

+ 17 - 0
libraries/promise-utils/index.js

@@ -13,6 +13,7 @@ module.exports = {
   expressify,
   expressifyErrorHandler,
   promiseMapWithLimit,
+  promiseMapSettledWithLimit,
 }
 
 /**
@@ -264,3 +265,19 @@ async function promiseMapWithLimit(concurrency, array, fn) {
   const limit = pLimit(concurrency)
   return await Promise.all(array.map(x => limit(() => fn(x))))
 }
+
+/**
+ * Map values in `array` with the async function `fn`
+ *
+ * Limit the number of unresolved promises to `concurrency`.
+ *
+ * @template T, U
+ * @param {number} concurrency
+ * @param {Array<T>} array
+ * @param {(T) => Promise<U>} fn
+ * @return {Promise<Array<PromiseSettledResult<U>>>}
+ */
+function promiseMapSettledWithLimit(concurrency, array, fn) {
+  const limit = pLimit(concurrency)
+  return Promise.allSettled(array.map(x => limit(() => fn(x))))
+}