【问题标题】:Angular 4 - then is returning nullAngular 4 - 然后返回 null
【发布时间】:2017-05-28 22:49:42
【问题描述】:

我尝试从 Promise 中获取一些数据,但没有返回任何内容。有人可以帮我解决这个问题吗?怎么了??

返回测试是 zone_symbol__state:null __zone_symbol__value:Array(0)__proto:Object

load(): Promise < any > {
  const test = this.http
    .get(this.translationPath)
    .toPromise()
    .then(
      this.createTranslationProviders
    ).catch((err: any) => {
      Promise.resolve();
      console.log('resolve' + err)
    });
  return test; // this is always NULL 
}



private createTranslationProviders(response: Response) {
  let translationProvider: any;
  translationProvider = [
    //  { provide: TRANSLATIONS, useValue: response },
    //  { provide: TRANSLATIONS_FORMAT, useValue: 'xlf' },
    {
      provide: LOCALE_ID,
      useValue: 'de_DE'
    }
  ];
  return translationProvider;
}

【问题讨论】:

  • 你在做什么?你为什么要改信诺言?
  • .then() 不返回 Promise。它实际上什么也没返回。
  • 我添加了一个 plunker:plnkr.co/edit/lo3IM65rOLQ7ny8bXD8J?p=preview 它不工作,但是,我在我的项目中使用 CLI。目标是将本地提供传递给 APP_INITIALIZER。我想,我误解了一些一般性的东西。希望有人给我一些帮助。

标签: angular


【解决方案1】:

您的 TranslationService 在 Promise 中返回提供者列表,但您没有将此提供者添加到模块中。您可以在不使用 APP_INITIALIZER 的情况下查看 ng-conf 翻译 repo 它是如何工作的,但会加载提供者列表并在使用它们的 boostraping 模块之后:

https://github.com/ocombe/i18n-demo/blob/c3a063bb51d097eee14f889bce48b4bb9df9d1da/src/main.ts#L12

getTranslationProviders(environment.production).then((providers: 
  CompilerOptions[]) => {
   const options = { providers };
   platformBrowserDynamic().bootstrapModule(AppModule, options);
});

另外请注意,目前它不适用于 AOT。您可能会发现以下链接会有所帮助:

[i18n] v4 及更高版本的计划 - https://github.com/angular/angular/issues/16477

迷失在翻译中 (ng-conf 2017) - https://www.youtube.com/watch?v=dihyu1a2bPc

【讨论】:

  • 感谢 Julia,但我没有使用 system.js 来读取文件。我想知道,如何改用角度 http 请求?如何将其导入到模块导出函数中?
  • 这个 repo 使用 angular-cli,它也不使用 systemJS,而是使用 webpack。你为什么要考虑systemJS?如果您考虑 System.import,它与 SystemJS 无关,但这是基于标准加载异步内容的 webpack 功能。
  • 是的,“System.import”的原因 - 感谢您将光明带入黑暗。 “System.import”直到现在才起作用。系统..找不到...或其他东西。我会检查它为什么不起作用...我必须在某处包含“系统”吗?
  • 声明 var System: any;
  • 好的,它正在工作,现在 - 到目前为止。但我想知道,这个块文件是出于什么原因创建的?我调试代码,它似乎正在读取 lang-change 上的 xlf 文件。块文件发生了什么?
猜你喜欢
  • 1970-01-01
  • 2019-08-05
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多