29 lines
726 B
JavaScript
29 lines
726 B
JavaScript
/* 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 = {});
|