mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
In the original `Promise` impelmentation, zone.js follow the spec from https://promisesaplus.com/#point-51. ``` const p1 = Promise.resolve(1); const p2 = Promise.resolve(p1); p1 === p2; // false ``` in this case, `p2` should be the same status with `p1` but they are still different instances. And for some edge case. ``` class MyPromise extends Promise { constructor(sub) { super((res) => res(null)); this.sub = sub; } then(onFufilled, onRejected) { this.sub.then(onFufilled, onRejected); } } const p1 = new Promise(setTimeout(res), 100); const myP = new MyPromise(p1); const r = await myP; r === 1; // false ``` So in the above code, `myP` is not the same instance with `p1`, and since `myP` is resolved in constructor, so `await myP` will just pass without waiting for `p1`. And in the current `tc39` spec here https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-promise-resolve `Promise.resolve(subP)` should return `subP`. ``` const p1 = Promise.resolve(1); const p2 = Promise.resolve(p1); p1 === p2; // true ``` So the above `MyPromise` can wait for the `p1` correctly. PR Close #53423 |
||
|---|---|---|
| .. | ||
| aio-preview-build.yml | ||
| aio-preview-deploy.yml | ||
| assistant-to-the-branch-manager.yml | ||
| benchmark-compare.yml | ||
| ci-privileged.yml | ||
| ci.yml | ||
| dev-infra.yml | ||
| feature-requests.yml | ||
| google-internal-tests.yml | ||
| merge-ready-status.yml | ||
| monitoring.yml | ||
| scorecard.yml | ||
| update-cli-help.yml | ||
| update-events.yml | ||