Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.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 如何抛出可观察到的错误_Angular_Rxjs_Observable - Fatal编程技术网

Angular 如何抛出可观察到的错误

Angular 如何抛出可观察到的错误,angular,rxjs,observable,Angular,Rxjs,Observable,我在《角度4》中有这个方法: modifyStock(id: number, quantity: number) { const url = `/item/${id}/modifyStock`; const body = { quantity: quantity }; return this.http.put(url, body); } 我想控制是否有任何输入参数为null,如果发生,就不要调用http.put(),然后抛出一个必须在调用此参数的subscribe()方法中捕获的

我在《角度4》中有这个方法:

modifyStock(id: number, quantity: number) {
  const url = `/item/${id}/modifyStock`;
  const body = { quantity: quantity };

  return this.http.put(url, body);
}
我想控制是否有任何输入参数为
null
,如果发生,就不要调用
http.put()
,然后抛出一个必须在调用此参数的
subscribe()
方法中捕获的错误

我尝试了这个和一些组合,比如
throw Observable.throw('Error')
,但我无法让它工作

modifyStock(id: number, quantity: number) {
  if (id == null || quantity == null) {
    return Observable.throw('Error');
  }

  const url = `/item/${id}/modifyStock`;
  const body = { quantity: quantity };

  return this.http.put(url, body);
}

您可以让观察者抛出错误:

this.data = new Observable(observer => {
      setTimeout(() => {
          observer.next(42);
      }, 1000);

      setTimeout(() => {
          observer.next(43);
      }, 2000);

      setTimeout(() => {
         observer.error('bla');
      }, 2500);

      setTimeout(() => {
          observer.complete();
      }, 3000);
  });

可观察。抛出
应该有效。请确保正确导入它

import { Observable } from "rxjs/Observable";
import 'rxjs/add/observable/throw';
您应该能够像在示例中那样使用它

test() {
  this.modifyStock(1, null).subscribe(() => {
    console.log('success');
  }, 
  err => {
    console.log('error', err);
  })
}

modifyStock(id: number, quantity: number): Observable<any> {
  if (id == null || quantity == null) {
    return Observable.throw('Error');
  }

  const url = `/item/${id}/modifyStock`;
  const body = { quantity: quantity };

  return this.http.put(url, body);
}
test(){
this.modifyStock(1,null).subscribe(()=>{
console.log('success');
}, 
错误=>{
console.log('error',err);
})
}
修改库存(id:编号,数量:编号):可观察{
如果(id==null | |数量==null){
返回可观察的。抛出('Error');
}
常量url=`/item/${id}/modifyStock`;
const body={quantity:quantity};
返回this.http.put(url,body);
}

TS不停下来给我这个错误:
应该是0个参数,但是得到了1个。
即使我这样写订阅:
this.modifyStock(1,null).subscribe(()=>{})
@J.J.Bocanegra在这种情况下,您应该明确地将返回类型声明为
:Observable
。我已经更新了我的答案。throw被弃用了吗?@torazaburo Typescript对此表示不满。请提供TS错误。@torazaburo
应为0个参数,但得到1个。
。我用
this.myService.modifyStock(id,1.subscribe(()=>{})调用它(也给出错误的简化示例)