我需要达到角度同步功能(另一个等待第一个结束)。
例如,我有两个提供程序(MenuProvider和ShopProvider)。
MenuProvider有一个方法:
bridal_requests
通过HTTP检索当前商店的菜单项。
ShopProvider有一个方法:
getMenuItemsForCurrentShop()
通过HTTP设置当前使用的商店。
我需要" getMenuItemsForCurrentShop()"在" setCurrentShopById(idShop:number)"之后调用。理想情况下没有回调。
答案 0 :(得分:3)
在angular1与angular2中处理这种情况的方式有所不同。
angular1的典型方法是使用promises,即你的第一个提供者方法将返回promise,你所做的只是在返回对象上调用.then
方法,传递将接受结果的callback
函数第一种方法,你将在其中调用第二种方法。
有关此技术的示例,您可以看到@Pankaj的答案。
Angular2在这个意义上是不同的,因为它开始使用ReactiveExtensions库(rx.js)。因此,与承诺相比,每个可能返回Observable<Someth>
的组件提供了更多的方法来处理它。 (你仍然可以使用promises方法和observables)。
有关如何使用angular2 \ http模块的示例,请参阅另一个问题:Angular 2: How to use/import the http module?
另请查看angular2
中的http module docs<强> ShopApi.ts:强>
import {Injectable, bind} from 'angular2/di';
import {Http, Headers} from 'angular2/http';
import {Observable} from 'rx';
@Injectable()
export class ShopApi {
constructor(public http: Http) {
}
setCurrentShopById(idShop:Number) {
return this.http.get('http://myservice.com/current/shop/', idShop)
.toRx()
.map(res => res.json());
}
getMenuItemsForCurrentShop() {
return this.http.get('http://myservice.com/current/shop/items')
.toRx()
.map(res => res.json());
}
}
&#13;
答案 1 :(得分:2)
您不应该考虑制作同步ajax来解决您的问题,因为它们会导致浏览器挂起(糟糕的用户体验)&amp;也停止执行一段时间的代码。可能在将来sync
任何浏览器都不支持ajax。
您只需按照异步方式处理此问题,使用promise模式可以帮助您解决问题。您应该在setCurrentShopById
.then function。
getMenuItemsForCurrentShop
我假设
getMenuItemsForCurrentShop
函数已经返回了promise 对象
this.getMenuItemsForCurrentShop().then((response) => {
this.setCurrentShopById(response.artists.items);
});