| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
							- "use strict";
 
- var _promiseUtils = require("./promiseUtils");
 
- /**
 
-  * @flow
 
-  */
 
- /*:: type Task = {
 
-   task: () => Promise,
 
-   _completion: Promise,
 
- };*/
 
- class TaskQueue {
 
-   /*:: queue: Array<Task>;*/
 
-   constructor() {
 
-     this.queue = [];
 
-   }
 
-   enqueue(task /*: () => Promise*/) /*: Promise*/{
 
-     const taskComplete = new _promiseUtils.resolvingPromise();
 
-     this.queue.push({
 
-       task: task,
 
-       _completion: taskComplete
 
-     });
 
-     if (this.queue.length === 1) {
 
-       task().then(() => {
 
-         this._dequeue();
 
-         taskComplete.resolve();
 
-       }, error => {
 
-         this._dequeue();
 
-         taskComplete.reject(error);
 
-       });
 
-     }
 
-     return taskComplete;
 
-   }
 
-   _dequeue() {
 
-     this.queue.shift();
 
-     if (this.queue.length) {
 
-       const next = this.queue[0];
 
-       next.task().then(() => {
 
-         this._dequeue();
 
-         next._completion.resolve();
 
-       }, error => {
 
-         this._dequeue();
 
-         next._completion.reject(error);
 
-       });
 
-     }
 
-   }
 
- }
 
- module.exports = TaskQueue;
 
 
  |