【问题标题】:Angular Error: [object Object] resolvePromise角度错误:[object Object] resolvePromise
【发布时间】:2018-11-22 07:25:42
【问题描述】:

我正在使用 Angular 7 并使用 observable 调用简单服务

import { Injectable } from '@angular/core';
import { Http, Headers} from '@angular/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  constructor(private http:Http) { }
  registerUser(user):Observable<any>{
    let headers = new Headers();
    headers.append('Content-Type','application/json');
    return this.http.post('http://localhost:8888/users/register', user, {headers:headers});
  }
}

虽然编译代码没问题,但是当它点击注册 url 和组件时会报错

ERROR Error: "[object Object]"
    resolvePromise http://localhost:4200/polyfills.js:3159:31
    resolvePromise http://localhost:4200/polyfills.js:3116:17
    scheduleResolveOrReject http://localhost:4200/polyfills.js:3218:17
    invokeTask http://localhost:4200/polyfills.js:2766:17
    onInvokeTask http://localhost:4200/vendor.js:72221:24
    invokeTask http://localhost:4200/polyfills.js:2765:17
    runTask http://localhost:4200/polyfills.js:2533:28
    drainMicroTaskQueue http://localhost:4200/polyfills.js:2940:25
vendor.js:70671:5
defaultErrorLogger
http://localhost:4200/vendor.js:70671:5
./node_modules/@angular/core/fesm5/core.js/ErrorHandler.prototype.handleError
http://localhost:4200/vendor.js:70719:9
next
http://localhost:4200/vendor.js:72698:111
./node_modules/@angular/core/fesm5/core.js/EventEmitter.prototype.subscribe/schedulerFn<
http://localhost:4200/vendor.js:68245:36
./node_modules/rxjs/_esm5/internal/Subscriber.js/SafeSubscriber.prototype.__tryOrUnsub
http://localhost:4200/vendor.js:141501:13
./node_modules/rxjs/_esm5/internal/Subscriber.js/SafeSubscriber.prototype.next
http://localhost:4200/vendor.js:141439:17
./node_modules/rxjs/_esm5/internal/Subscriber.js/Subscriber.prototype._next
http://localhost:4200/vendor.js:141382:9
./node_modules/rxjs/_esm5/internal/Subscriber.js/Subscriber.prototype.next
http://localhost:4200/vendor.js:141359:13
./node_modules/rxjs/_esm5/internal/Subject.js/Subject.prototype.next
http://localhost:4200/vendor.js:141124:25
./node_modules/@angular/core/fesm5/core.js/EventEmitter.prototype.emit
http://localhost:4200/vendor.js:68229:54
onHandleError/<
http://localhost:4200/vendor.js:72252:57
./node_modules/zone.js/dist/zone.js/</ZoneDelegate.prototype.invoke
zone.js:388
./node_modules/zone.js/dist/zone.js/</Zone.prototype.run
zone.js:138
./node_modules/@angular/core/fesm5/core.js/NgZone.prototype.runOutsideAngular
http://localhost:4200/vendor.js:72189:16
onHandleError
http://localhost:4200/vendor.js:72252:13
./node_modules/zone.js/dist/zone.js/</ZoneDelegate.prototype.handleError
zone.js:392
./node_modules/zone.js/dist/zone.js/</Zone.prototype.runGuarded
zone.js:154
_loop_1
zone.js:677
./node_modules/zone.js/dist/zone.js/</</api.microtaskDrainDone
zone.js:686
drainMicroTaskQueu
e
zone.js:602

如果我从组件//import {AuthService} from '../../services/auth.service'; 中删除此服务类,则代码运行时不会出错。 尝试返回简单的return user,但仍然出现错误。 也尝试在没有观察到的情况下返回。 你能帮我解决我做错的地方吗

【问题讨论】:

  • 为什么要将一个可观察对象包装在另一个可观察对象中?
  • this.http.post('http://localhost:8888/users/register', user, {headers:headers}) 已经是Observable 为什么还要用of 退回它
  • 我尝试了最简单的方法import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class AuthService { user="hi"; constructor() { } registerUser(user){ return this.user; } } 仍然出现同样的错误

标签: angular observable angular7


【解决方案1】:

自 Angular 5 起,Http 的使用已被弃用。因此它在 Angular 7 中不可用。

您应该使用HttpClient 而不是Http。此外,默认情况下会添加 Content-Type 标头。所以你不需要明确添加。

最后,http.post 已经返回了一个 Observable。所以你不需要把它包装在of

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  constructor(private http: HttpClient) {}

  registerUser(user): Observable <any> {
    return this.http.post('http://localhost:8888/users/register', user);
  }

}

您还必须将HttpClientModule 添加到您的AppModuleimports 数组中:

import { HttpClientModule } from '@angular/common/http';

@NgModule({
  ...,
  imports: [..., HttpClientModule, ...]
  ...
})

然后在你的组件中:

constructor(private authService: AuthService) {}
...
const user = ...

this.authService.registerUser(user)
  .subscribe(response  => console.log(response));
...

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多