63 lines
1.4 KiB
JavaScript
63 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
var Promise;
|
|
|
|
if (require('node-version').major >= 4) {
|
|
Promise = global.Promise;
|
|
} else {
|
|
// Don't use the native Promise in Node.js <4 since it doesn't support subclassing
|
|
Promise = require('promise-polyfill');
|
|
}
|
|
|
|
class ChildProcessPromise extends Promise {
|
|
constructor(executor) {
|
|
var resolve;
|
|
var reject;
|
|
|
|
super((_resolve, _reject) => {
|
|
resolve = _resolve;
|
|
reject = _reject;
|
|
|
|
if (executor) {
|
|
executor(resolve, reject);
|
|
}
|
|
});
|
|
|
|
this._cpResolve = resolve;
|
|
this._cpReject = reject;
|
|
this.childProcess = undefined;
|
|
}
|
|
|
|
progress(callback) {
|
|
process.nextTick(() => {
|
|
callback(this.childProcess);
|
|
});
|
|
|
|
return this;
|
|
}
|
|
|
|
then(onFulfilled, onRejected) {
|
|
var newPromise = super.then(onFulfilled, onRejected);
|
|
newPromise.childProcess = this.childProcess;
|
|
return newPromise;
|
|
}
|
|
|
|
catch(onRejected) {
|
|
var newPromise = super.catch(onRejected);
|
|
newPromise.childProcess = this.childProcess;
|
|
return newPromise;
|
|
}
|
|
|
|
done() {
|
|
this.catch((e) => {
|
|
process.nextTick(() => {
|
|
throw e;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
ChildProcessPromise.prototype.fail = ChildProcessPromise.prototype.catch;
|
|
|
|
module.exports = ChildProcessPromise;
|