Kaynağa Gözat

Allow iterables as first items in a chain.

Eugene Lazutkin 7 yıl önce
ebeveyn
işleme
c7c673cd5c
2 değiştirilmiş dosya ile 10 ekleme ve 0 silme
  1. 5 0
      utils/asFun.js
  2. 5 0
      utils/asGen.js

+ 5 - 0
utils/asFun.js

@@ -54,6 +54,11 @@ const nop = () => {};
 const asFun = (...fns) => {
   fns = fns.filter(fn => fn);
   if (!fns.length) return nop;
+  if (Symbol.asyncIterator && fns[0][Symbol.asyncIterator]) {
+    fns[0] = fns[0][Symbol.asyncIterator];
+  } else if (Symbol.iterator && fns[0][Symbol.iterator]) {
+    fns[0] = fns[0][Symbol.iterator];
+  }
   return async value => {
     const results = [];
     await next(value, fns, 0, value => results.push(value));

+ 5 - 0
utils/asGen.js

@@ -56,6 +56,11 @@ const nop = async function*() {};
 const asGen = (...fns) => {
   fns = fns.filter(fn => fn);
   if (!fns.length) return nop;
+  if (Symbol.asyncIterator && fns[0][Symbol.asyncIterator]) {
+    fns[0] = fns[0][Symbol.asyncIterator];
+  } else if (Symbol.iterator && fns[0][Symbol.iterator]) {
+    fns[0] = fns[0][Symbol.iterator];
+  }
   return async function*(value) {
     yield* next(value, fns, 0);
   };