summaryrefslogtreecommitdiff
path: root/addon-sdk/source/examples/debug-client/data/task.js
blob: b46feb10e9920b908b073e7029775b94146f37e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

(function(exports) {
"use strict";

const spawn = (task, ...args) => {
  return new Promise((resolve, reject) => {
    try {
      const routine = task(...args);
      const raise = error => routine.throw(error);
      const step = data => {
        const { done, value } = routine.next(data);
        if (done)
          resolve(value);
        else
          Promise.resolve(value).then(step, raise);
      }
      step();
    } catch(error) {
      reject(error);
    }
  });
}
exports.spawn = spawn;

})(Task = {});