2017-09-26 2 views

답변

0

당신은 임의의 반복자를 복제 할 수 없습니다,하지만 당신은 어떤 상태에 잡고 하나에서 많은 별개의 반복자를 만들 수 있습니다

function tee(iterable) { 
    const source = iterable[Symbol.iterator](); 
    const buffers = [[], []]; // substitute in queue type for efficiency 
    const DONE = Object.create(null); 

    const next = i => { 
     if (buffers[i].length !== 0) { 
      return buffers[i].shift(); 
     } 

     const x = source.next(); 

     if (x.done) { 
      return DONE; 
     } 

     buffers[1 - i].push(x.value); 
     return x.value; 
    }; 

    return buffers.map(function* (_, i) { 
     for (;;) { 
      const x = next(i); 

      if (x === DONE) { 
       break; 
      } 

      yield x; 
     } 
    }); 
} 

사용법 :

const [a, b] = tee(iterator); 
assert(a.next().value === b.next().value); 
2

이터레이터를 복제 할 수 없습니다. 반복자 (iterator) 상태는 기본적으로 완전히 임의적이며 주어진 반복자는 요구에 따라 반복 할 수없는 부작용 (예 : 네트워크 스트림 읽기 또는 쓰기)을 필요로하거나 생성 할 수 있습니다.