简体   繁体   English

Observable似乎不适用于Chrome 41

[英]Observable don't seem to work with Chrome 41

I am currently trying to make my Angular 7 app to get crawled by Google properly, but unfortunately it seems like using HttpClient creates some trouble when I subscribe to it or attempt to convert it to a promise. 我正在尝试使我的Angular 7应用程序正确地被Google抓取,但不幸的是,当我订阅它或尝试将其转换为承诺时,似乎使用HttpClient会产生一些麻烦。

When using HttpClient, chrome 41 throws the following error: 使用HttpClient时,chrome 41会引发以下错误:

TypeError: Cannot read property 'call' of undefined {stack: (...), message: "Cannot read property 'call' of undefined"}
errors.ts:35defaultErrorLogger
error_handler.ts:51push../node_modules/@angular/core/fesm5/core.js.ErrorHandler.handleError
application_ref.ts:230next
event_emitter.ts:110push../node_modules/@angular/core/fesm5/core.js.EventEmitter.subscribe.schedulerFn
Subscriber.ts:266push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub
Subscriber.ts:208push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next
Subscriber.ts:140push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next
Subscriber.ts:100push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next
Subject.ts:71push../node_modules/rxjs/_esm5/internal/Subject.js.Subject.next
event_emitter.ts:92push../node_modules/@angular/core/fesm5/core.js.EventEmitter.emit
ng_zone.ts:296(anonymous function)
zone.js:391push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke
zone.js:150push../node_modules/zone.js/dist/zone.js.Zone.run
ng_zone.ts:218push../node_modules/@angular/core/fesm5/core.js.NgZone.runOutsideAngular
ng_zone.ts:296onHandleError
zone.js:395push../node_modules/zone.js/dist/zone.js.ZoneDelegate.handleError
zone.js:245push../node_modules/zone.js/dist/zone.js.Zone.scheduleTask
zone.js:261push../node_modules/zone.js/dist/zone.js.Zone.scheduleMacroTask
zone.js:1194scheduleMacroTaskWithCurrentZone
zone.js:3371(anonymous function)
zone.js:1518push../node_modules/zone.js/dist/zone.js.proto.(anonymous function)
xhr.ts:319push../node_modules/@angular/common/fesm5/http.js.HttpXhrBackend.handle
Observable.ts:239push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe
Observable.ts:221push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe
subscribeToResult.ts:29subscribeToResult
mergeMap.ts:156push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._innerSub
mergeMap.ts:149push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext
mergeMap.ts:132push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next
Subscriber.ts:100push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next
subscribeToArray.ts:11push../node_modules/rxjs/_esm5/internal/util/subscribeToArray.js.subscribeToArray
Observable.ts:239push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe
Observable.ts:221push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe
mergeMap.ts:111push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapOperator.call
Observable.ts:215push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe
filter.ts:72push../node_modules/rxjs/_esm5/internal/operators/filter.js.FilterOperator.call
Observable.ts:215push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe
map.ts:60push../node_modules/rxjs/_esm5/internal/operators/map.js.MapOperator.call
Observable.ts:215push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe
...
...
...

I did a simple check by replacing this: 我做了一个简单的检查,取而代之的是:

  this.http.get(endpoint, this.requestHeaders).toPromise()

by this: 这样:

  this.http.get(endpoint, this.requestHeaders)

The error went away, but I can't resolve my promise inside the tap so it's not really useful for me. 错误消失了,但我无法在水龙头内解决我的承诺,所以这对我来说并不是真的有用。 Any idea what's going wrong? 知道出了什么问题吗?

I am pretty sure that your subscribe function has incorrect parameters.. 我很确定你的订阅功能有不正确的参数..

it should receive a function like below. 它应该收到如下的功能。

return this.http.get(filename, {responseType: 'text'})
    .subscribe(
        data => { 
            this.log(filename, data);
        },
        error => { 
            this.logError(filename, error);
        });

Update: 更新:

Please see compatibility of Promise in versions of browser at caniuse.com . 请参阅caniuse.com浏览器版本中Promise兼容性。 According to that, Promise classes are not supported in Chrome 41 and support is from Chrome 63 only. 据此,Chrome 41不支持Promise类,仅支持Chrome 63。

Another point is that ES6 classes are not supported in Chrome versions 4-41 as well. 另一点是Chrome版本4-41也不支持ES6类

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM