如何在Angular2中做一个关于http同步的例子?

时间:2016-07-18 09:13:32

标签: angular

如何在Angular2中创建一个有关同步的http的例子?

我在组件中尝试了如下:

getAllAddress(){
    this.addressService.getAllAddress().then(`enter code here`
            result => {
                this.data = result.list;
                this.onChangeTable(this.config, null);
                console.log('FIRST');
            }
        );
    console.log('LAST');
}

在服务中:

public getAllAddress(){
    return this.__http.get('LOCATION')
    .map((res) => {
    return res.json()
    })
    .toPromise();
}

但是控制台显示日志在'FIRST'之前是'LAST'。

1 个答案:

答案 0 :(得分:1)

实际上,由于底层API(APP_INITIALIZER)是异步的,因此无法在浏览器中同步加载数据。

话虽如此,如果您的数据是参考数据或配置数据,您可以预加载数据。在这种情况下,您可以利用provide(APP_INITIALIZER, { useFactory: (service:GlobalService) => () => service.load(), deps:[GlobalService, HTTP_PROVIDERS], multi: true }) 服务。应用程序将等待返回的promise在实际启动之前得到解决。

以下是一个示例:

load

load():Promise<Site> { var promise = this.http.get('config.json').map(res => res.json()).toPromise(); promise.then(config => this.devServer = config.devServer); return promise; } 方法需要类似的东西:

devServer

然后你可以直接使用 unlink(FCPATH.$image->file); (同步)......