angular-docs-cn/packages/zone.js/lib/browser
JiaLiPassion 008eaf3b7d fix(zone.js): should continue to executue listeners when throw error (#41562)
Close #41522

`zone.js` patches event listeners and run all event listeners together, if
one event handler throws error, the listeners afterward may not be invoked.

Reproduction:

```
export class AppComponent implements AfterViewInit {
  @ViewChild('btn') btn: ElementRef;
  title = 'event-error';

  constructor(private ngZone: NgZone) {}

  ngAfterViewInit() {
    this.ngZone.runOutsideAngular(() => {
      this.btn.nativeElement.addEventListener('click', () => {
        throw new Error('test1');
      });
      this.btn.nativeElement.addEventListener('click', () => {
        console.log('add eventlistener click');
      });
    });
  }
}
```

Until now no Angular users report this issue becuase in the `ngZone`, all
error will be caught and will not rethrow, so the event listeners afterward
will still continue to execute, but if the event handlers are outside of `ngZone`,
the error will break the execution.

This commit catch all errors, and after all event listeners finished invocation,
rethrow the errors in seperate `microTasks`, the reason I am using `microTask` here
is to handle multiple errors case.

PR Close #41562
2021-04-21 15:54:08 -07:00
..
api-util.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
browser-legacy.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
browser-util.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
browser.ts fix(zone.js): should continue to executue listeners when throw error (#41562) 2021-04-21 15:54:08 -07:00
canvas.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
custom-elements.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
define-property.ts refactor(zone.js): update Object.create params to match web platform (#34287) 2021-02-22 08:47:39 -08:00
event-target-legacy.ts fix(zone.js): should continue to executue listeners when throw error (#41562) 2021-04-21 15:54:08 -07:00
event-target.ts fix(zone.js): should continue to executue listeners when throw error (#41562) 2021-04-21 15:54:08 -07:00
message-port.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
property-descriptor-legacy.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
property-descriptor.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
register-element.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
rollup-common.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
rollup-legacy-main.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
rollup-legacy-test-main.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
rollup-main.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
rollup-test-main.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
shadydom.ts fix(zone.js): should continue to executue listeners when throw error (#41562) 2021-04-21 15:54:08 -07:00
webapis-media-query.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
webapis-notification.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
webapis-resize-observer.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
webapis-rtc-peer-connection.ts fix(zone.js): should continue to executue listeners when throw error (#41562) 2021-04-21 15:54:08 -07:00
webapis-user-media.ts build: update license headers to reference Google LLC (#37205) 2020-05-26 14:26:58 -04:00
websocket.ts fix(zone.js): should continue to executue listeners when throw error (#41562) 2021-04-21 15:54:08 -07:00