1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- function noPromise(){
- let resolve, reject;
- let np = new Promise((ok, fail) => {resolve = ok; reject = fail});
- np.resolve = resolve;
- np.reject = reject;
- return np
- }
- function asynchronize({s, chunkEventName, endEventName}){
- return function* wrapper(){
- const chunks = {};
- const promises = {};
- const clear = i => (delete chunks[i], delete promises[i])
- let chunkCount = 0;
- let promiseCount = 0;
- let end = false;
- s.on(chunkEventName, data => {
- chunks[chunkCount] = data
- if (chunkCount in promises){
- promises[chunkCount].resolve(chunks[chunkCount])
- clear(chunkCount)
- }
- chunkCount++
- })
- s.on(endEventName, () => {
- end = true;
- for (let i in promises){
- promises[i].reject(new Error('End Of S'))
- }
- })
- while (!end){
- let p = noPromise()
- if (promiseCount in chunks){
- p.resolve(chunks[promiseCount])
- clear(promiseCount)
- }
- promises[promiseCount] = p;
- promiseCount++
- yield p;
- }
- }
- }
|