【问题标题】:Unhandled Promise Rejection AOT(Ahead Of Time) Angular 2未处理的承诺拒绝 AOT(提前)Angular 2
【发布时间】:2017-05-14 04:47:41
【问题描述】:

我有一个从 ASP.net MVC Web API 获取数据的小型 Angular 2 应用程序。使用身份验证。我正在尝试在 Angular 2 中使用 Ahead Of Time 编译器。我正在运行以下命令

node_modules\.bin\ngc -p src

但我收到以下错误

(node:13640) UnhandledPromiseRejectionWarning: 未处理的承诺 拒绝(拒绝 id:2):TypeError:右侧 'instanceof' 不是对象(节点:13640) 弃用警告: 未处理的承诺拒绝已被弃用。未来,承诺 未处理的拒绝将终止 Node.js 进程 带有非零退出代码。

谁能告诉我如何解决它

这是我的目录结构

我已将 tsconfig.json 从根目录移动到 src 文件夹,因为它在 link 中被指示

这就是我使用 Promise 的方式

我已经做出了这样的承诺:

public get(servicename: string) {
    this.colorlog.log('get ' + servicename + " ",enmMessageType.Info);
    return this.http.get(this.ngWEBAPISettings.apiServiceBaseUri + "api/" + servicename + "/", this.ngWEBAPISettings.getConfig()).toPromise();
}

并在这样的组件中使用它

get() {
    var promise = this.setupServicePromise.get(this.SERVICE_NAME);

    promise.then((response: any) => {
      this.colorlog.log('in then promise ProductComponent get' + response,   enmMessageType.Data);
      this.vm.Products = response.json();
    }).catch((error: any) => {
      this.colorlog.log("Error Occurred in product", enmMessageType.Error);
    });
}

这是我的 ts.config 文件。

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": ["es2015", "dom"],
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true
  }
}

【问题讨论】:

  • 你能分享你的 tsconfig 文件吗?
  • 请检查问题
  • 我遇到了这个问题,我通过将我的 Angular 更新到最新的 2.4.1 来解决它,我的意思是 angular/core、common、form、compiler、compiler-cli。试试这个
  • @MrJSingh 更新版本,经过一些更改后它可以工作,非常感谢您的帮助
  • @MrJSingh,别担心,我发现了这个GitHub issue,它是在 Angular 2.2.4 上报告的,但问题似乎已经传播到 Angular 2.3。该问题与 TypeScript 2.1 的某些不兼容有关。

标签: node.js asp.net-mvc angular angular2-aot


【解决方案1】:

我已通过以下步骤完成此操作

第一

我已经更新了 MrJSingh

提到的版本

更新后 package.json 依赖部分变成这样。

"dependencies": {
  "@angular/common": "~2.4.0",
  "@angular/compiler": "~2.4.0",
  "@angular/compiler-cli": "^2.4.1",
  "@angular/core": "~2.4.0",
  "@angular/forms": "~2.4.0",
  "@angular/http": "~2.4.0",
  "@angular/platform-browser": "~2.4.0",
  "@angular/platform-browser-dynamic": "~2.4.0",
  "@angular/router": "~3.4.0",
  "core-js": "^2.4.1",
  "rxjs": "5.0.1",
  "zone.js": "^0.7.4"
},

第二

之后,我对 app.module.ts 文件进行了更改,并将 useValue 更改为 useFactory

改一下

let authService = new AuthService(new LocalStorage());
providers: [
  {provide:AuthService,useValue:authService},
  AdminAuthGuard,
  UserAuthGuard,
  SetupServicePromise,
  SetupServiceObservables
]

到这里

export function authServiceFactory() {
  return new AuthService(new LocalStoragee());
}

providers: [
  {provide:AuthService,useFactory:authServiceFactory},
  AdminAuthGuard,
  UserAuthGuard,
  WebAPISettings,
  LoginService,
  SetupServicePromise,
  SetupServiceObservables
]

经过这两步,最终命令运行成功。

注意

对于最新版本,请使用声明而不是提供者

declarations: [
  {provide:AuthService,useFactory:authServiceFactory},
  AdminAuthGuard,
  UserAuthGuard,
  WebAPISettings,
  LoginService,
  SetupServicePromise,
  SetupServiceObservables
]

更多详情请查看link

【讨论】:

  • 在这几周里,Angular 模块没有提供者,而是有声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 2019-01-11
  • 2018-03-31
相关资源
最近更新 更多