Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 4按顺序执行请求,如果一个请求失败则停止_Angular_Rest_Http - Fatal编程技术网

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中取消订阅?看起来是这样的,是的,这有点麻烦