Angular 4按顺序执行请求,如果一个请求失败则停止
我很抱歉这样问,但我几乎是一个有棱角的傻瓜,一直在修改别人的代码,我担心,他也没有那么丰富的棱角经验 这是密码Angular 4按顺序执行请求,如果一个请求失败则停止,angular,rest,http,Angular,Rest,Http,我很抱歉这样问,但我几乎是一个有棱角的傻瓜,一直在修改别人的代码,我担心,他也没有那么丰富的棱角经验 这是密码 const searchTermStream = this.searchTerm.valueChanges .debounceTime(400) .filter(query => query.length > 2 || query.length === 0) .do(query => this.adjustBrowserUrl(query)) .dis
const searchTermStream = this.searchTerm.valueChanges
.debounceTime(400)
.filter(query => query.length > 2 || query.length === 0)
.do(query => this.adjustBrowserUrl(query))
.distinctUntilChanged()
.switchMap(query => this.itemService.findItems(query))
.subscribe()
;
const paramsStream = this.route.queryParams
.map(params => decodeURI(params['query'] || ''))
.do(query => this.searchTerm.setValue(query))
.distinctUntilChanged()
.switchMap(query => this.itemService.findItems(query))
.subscribe()
;
this.itemList$ = this.itemService.items$;
this.itemCount$ = this.itemService.countAllItems();
显然,这段代码进行rest调用,从后端检索items和itemCount,并在提供查询时进行筛选
问题是,当第一次调用失败时,会话超时,其他调用仍在执行,并导致后端出现异常,异常得到正确处理,但调用仍然是不需要的
因此,我现在需要弄清楚如何按顺序进行调用,并在第一个调用因任何原因失败时完全停止调用。
我在网上和这里发现了一些使用承诺和观察的例子,但由于我是一个noob,我有点难以理解它的头尾,并根据我的目的调整它们
任何帮助都将不胜感激。您可以尝试这样做:
this.itemList$ = this.itemService.items$;
this.itemList$.subscribe(() => {
this.itemCount$ = this.itemService.countAllItems();
},
err => {...})
别忘了在Ngondestory中清理订阅
或者,如果您确实喜欢与承诺一起工作:
import "rxjs/add/operator/toPromise";
this.itemList$ = this.itemService.items$;
this.itemList$.toPromise().then(() => {
this.itemCount$ = this.itemService.countAllItems();
},
err => {...})
我假设您调用的第一个调用是这个.itemService.items$,您还可以添加它返回的内容吗?它返回items$:Observable;据我所知。似乎有很多神奇的事情在发生,看起来有进步,似乎我触发了一个无限循环:D,但进步。我猜一个distinctuntillchange会引起另一个的刷新,然后它就发疯了。但到目前为止,非常感谢;我担心没有更多的信息,很难理解你为什么会有一个无限的循环。呵呵,是的,我正在试图收集信息;编辑:好吧,这绝对是唯一的改变。所有这些意味着我必须将订阅存储到类字段中,然后在Ngondestory中取消订阅?看起来是这样的,是的,这有点麻烦