Skip to content

Commit

Permalink
Improved isCanceled state for then method;
Browse files Browse the repository at this point in the history
  • Loading branch information
DigitalBrainJS committed Nov 26, 2020
1 parent 941911e commit 004f032
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 22 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ const promise= new CPromise((resolve, reject, {onCancel, onPause, onResume})=>{
});
}).then(
value => console.log(`Done: ${value}`),
err => {
(err, scope) => {
console.warn(`Failed: ${err}`); // Failed: CanceledError: canceled
console.log('isCanceled:', promise.isCanceled); // true
console.log('chain isCanceled:', promise.isCanceled); // true
console.log('promise isCanceled:', scope.isCanceled); // true
}
);

Expand Down
5 changes: 3 additions & 2 deletions jsdoc2md/README.hbs.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ const promise= new CPromise((resolve, reject, {onCancel, onPause, onResume})=>{
});
}).then(
value => console.log(`Done: ${value}`),
err => {
(err, scope) => {
console.warn(`Failed: ${err}`); // Failed: CanceledError: canceled
console.log('isCanceled:', promise.isCanceled); // true
console.log('chain isCanceled:', promise.isCanceled); // true
console.log('promise isCanceled:', scope.isCanceled); // true
}
);

Expand Down
35 changes: 17 additions & 18 deletions lib/c-promise.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ const {isArray} = Array;

const _toCPromise = Symbol.for('toCPromise');

const _handleCancelRejection = Symbol('handleCancelRejection');

const _shadow = Symbol('shadow');
const _events = Symbol('events');
const _resolve = Symbol('done');
Expand Down Expand Up @@ -657,6 +655,7 @@ class CPromise extends Promise {
this.emit('done', value);
shadow.reject(value);
} else {
shadow.isCanceled = false;
shadow.isCaptured && this.progress(1);
this.emit('done', undefined, value);
shadow.resolve(value);
Expand All @@ -668,7 +667,16 @@ class CPromise extends Promise {
}

if (isRejected && value && value instanceof CanceledError) {
this[_handleCancelRejection](value);
shadow.isCanceled = true;

value.scope || (value.scope = this);

if (shadow.controller) {
shadow.controller.abort();
shadow.controller = null;
}

this.emit('cancel', value);
resolve();
return;
}
Expand Down Expand Up @@ -716,20 +724,6 @@ class CPromise extends Promise {
);
}

[_handleCancelRejection](err) {
const shadow = this[_shadow];
shadow.isCanceled = true;

err.scope || (err.scope = this);

if (shadow.controller) {
shadow.controller.abort();
shadow.controller = null;
}

this.emit('cancel', err);
}

/**
* Pause promise
* @returns {Boolean}
Expand Down Expand Up @@ -844,7 +838,12 @@ class CPromise extends Promise {
then(onFulfilled, onRejected) {
const promise = super.then(
onFulfilled && ((value) => onFulfilled.call(promise, value, promise)),
onRejected && ((err) => onRejected.call(promise, err, promise))
onRejected && ((err) => {
if(this[_shadow].isCanceled){
promise[_shadow].isCanceled= true;
}
return onRejected.call(promise, err, promise)
})
);

promise[_shadow].parent = this;
Expand Down

0 comments on commit 004f032

Please sign in to comment.