未验证 提交 b58abdcf 编写于 作者: J Johannes Rieken 提交者: GitHub

Merge pull request #57723 from blutorange/master

fix promise polyfill, chaining promises works
......@@ -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);
});
});
}
}
));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册