如何在此代码中等待响应。 在这段代码中,我在ws中发布了产品。我的问题是当ws的响应被延迟时,我可能会按下按钮提交几次。我必须等待响应才能多次按下按钮。
public createproduct(newprod: Product): Observable<boolean> {
let headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let body = newprod.generateUrlencodedParameters(this.auth.getCurrentUser().token);
return this.http.post(Api.getUrl(Api.URLS.createproduct), body, {
headers: headers
})
.map((response: Response) => {
let res = response.json();
if (res.StatusCode === 0) {
return true;
} else {
return true;
}
});
}
你能告诉我如何实现这个目标吗?
感谢名单
答案 0 :(得分:2)
这是一个异步调用。
所以你要做的是,你返回一个Observable对象,将来会改变并返回一些东西。
您要做的是在第一次调用后禁用该功能,直到它响应某些内容。
因此,如果您的按钮类似于<button (click)=sendRequest() ...
,那么您应该像以下那样实现它:
<button (click)=sendRequest(), [disabled]="areWeWaiting">CLICK ME</button>
areWeWaiting = false;
sendRequest(){
this.areWeWaiting = true;
this.someService.createProduct().subscribe(response =>{
this.areWeWaiting = false;
// process the call here
}, error =>{ this.areWeWaiting = false; //process error here}
);
}
此外,我建议您删除原始服务电话中的.map
部分 - 使用新的httpClient api