Skip to content

Commit

Permalink
Merge pull request #57723 from blutorange/master
Browse files Browse the repository at this point in the history
fix promise polyfill, chaining promises works
  • Loading branch information
jrieken committed Sep 3, 2018
2 parents d5b6d18 + be3a4a2 commit b58abdc
Showing 1 changed file with 32 additions and 4 deletions.
36 changes: 32 additions & 4 deletions src/vs/base/common/winjs.polyfill.promise.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,19 +71,47 @@ export class PolyfillPromise<T = any> implements Promise<T> {

then(onFulfilled?: any, onRejected?: any): PolyfillPromise {
let sync = true;
// To support chaining, we need to return the value of the
// onFulfilled and onRejected callback.
// WinJSPromise supports a flat-map style #then, ie. the callbacks
// passed to WinJSPromise#then can return a Promise.
let promise = new PolyfillPromise(this._winjsPromise.then(
onFulfilled && function (value) {
if (!sync) {
onFulfilled(value);
return onFulfilled(value);
} else {
platform.setImmediate(() => onFulfilled(value));
return new WinJSPromise((resolve, reject) => {
platform.setImmediate(() => {
let result;
try {
result = onFulfilled(value);
}
catch (err2) {
reject(err2);
return;
}
resolve(result);
});
});
}
},
onRejected && function (err) {
if (!sync) {
onRejected(err);
return onRejected(err);
} else {
platform.setImmediate(() => onRejected(err));
return new WinJSPromise((resolve, reject) => {
platform.setImmediate(() => {
let result;
try {
result = onRejected(err);
}
catch (err2) {
reject(err2);
return;
}
resolve(result);
});
});
}
}
));
Expand Down

0 comments on commit b58abdc

Please sign in to comment.