我有一个返回 void 的 web api 删除方法
在 Angular 2 中,如果我不订阅 Observable,web api 方法将永远不会被调用。 Question和 Cold vs Hot observables .由于需要返回一个 observable 和订阅,我试图将一个 Observable 返回为:
服务.ts
public deleteProduct = (product: ProductApi): Observable<boolean> | boolean => {
this._http.delete(this.actionUrl + product.productId)
.catch((error:boolean) => Observable.throw(false));
return true;
}
组件.ts
deleteProduct(product: ProductApi, event: any): void {
event.stopPropagation();
this.productApiService
.deleteProduct(product)
.subscribe((boolean) => {
this.products = this.products.filter(p => p !== product);
if (this.selectedProduct === product) { this.selectedProduct = null; }},
error => console.log(error),
() => {
console.log('ProductApiService:Delete completed');
});
}
Controller .cs
// DELETE api/product/5
[HttpDelete("{id}")]
public void Delete(int id)
{
_productService.DeleteProduct(id);
}
或者有办法返回一个 Observable<'void'> 吗?或者如果上述方法是正确的,我该如何解决以下错误?
- 构建:参数“boolean”隐式具有“任何”类型
- 构建:参数“error”隐式具有“任何”类型
- 构建:“ bool 值”类型上不存在属性“订阅”|可观察的”
最佳答案
为什么你需要在删除请求中捕获? 您可以在订阅时向错误函数添加错误逻辑。
public deleteProduct(product: ProductApi): Observable<any> {
return this._http.delete(this.actionUrl + product.productId);
}
然后
deleteProduct(product: ProductApi, event: any): void {
event.stopPropagation();
this.productApiService
.deleteProduct(product)
.subscribe(
response => {
this.products = this.products.filter(p => p !== product);
if (this.selectedProduct === product){
this.selectedProduct = null;
}},
error => console.log(error),
() => {
console.log('ProductApiService:Delete completed');
});
}
如果在此更改之后您的 Controller 仍未被调用,我认为这是路由错误。
关于angular - 当 Web API 返回 void 时订阅 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40596951/