Angular中的ZoneAwarePromise是一个带有Zone.js的Promise对象。一些版本的Angular默认返回ZoneAwarePromise对象而不是字符串,这可能会导致一些问题。
解决此问题的方法是覆盖默认的Promise实现,使用原生的Promise实现代替ZoneAwarePromise。
以下是一个示例,展示如何使用原生Promise实现来解决此问题:
import { NgModule, Injectable } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
// 使用zone.js会默认返回ZoneAwarePromise
// 覆盖zone.js默认的Promise实现
import 'zone.js/dist/zone-patch-rxjs-fake-async';
import { Zone } from 'zone.js';
Zone.__load_patch('ZoneAwarePromise', (global: any, Zone: any, api: any) => {
global.Promise = Promise;
});
@Injectable()
export class MyService {
getData(): Promise {
// 返回原生的Promise对象
return Promise.resolve('data');
}
}
@NgModule({
imports: [
BrowserModule,
],
declarations: [
AppComponent,
],
bootstrap: [
AppComponent,
],
})
export class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
此示例中,我们覆盖了zone.js中的Promise实现,使用原生的Promise替代。在服务中使用Promise后,使用Promise.resolve返回字符串而不是ZoneAwarePromise对象。