Javascript 在第8章中,HttpClient请求在承诺内失败,承诺永远无法解决
我正在使用带有Angular 8的ng select包向消息添加标记。我需要根据用户请求创建新标签。以下是文档示例:Javascript 在第8章中,HttpClient请求在承诺内失败,承诺永远无法解决,javascript,angular,tags,observable,angular-promise,Javascript,Angular,Tags,Observable,Angular Promise,我正在使用带有Angular 8的ng select包向消息添加标记。我需要根据用户请求创建新标签。以下是文档示例: addTagPromise(name) { return new Promise((resolve) => { this.loading = true; // Simulate backend call. setTimeout(() => { resolve({ id: 5, name:
addTagPromise(name) {
return new Promise((resolve) => {
this.loading = true;
// Simulate backend call.
setTimeout(() => {
resolve({ id: 5, name: name, valid: true });
this.loading = false;
}, 1000);
})
}
这段代码在一秒钟后添加了一个新标记,并且可以正常工作。但我需要一个真正的服务器端请求。
问题是,当我添加一个HttpClient请求时,它根本不会执行
例如,在此代码中,“get”请求将永远不会执行,承诺也永远不会解决!:
addTagPromise(name) {
return new Promise(resolve => {
this.http.get("http://google.com").subscribe(); <--- Will never executed
this.loading = true;
// Simulate backend call.
setTimeout(() => {
resolve({ id: 5, name: name, valid: true }); <--- Never resolves
this.loading = false;
}, 1000);
});
}
你为什么把可观察的东西包装成承诺?您可以使用
toPromise
运算符表单RxJsthis.categoryService.add(newLabel).toPromise()
@dev那么我应该在哪里写订阅正文?你能用toPromise重写最后一个代码狙击手吗?为什么你要把Observable包装成Promise?您可以使用toPromise
运算符表单RxJsthis.categoryService.add(newLabel).toPromise()
@dev那么我应该在哪里写订阅正文?你能用toPromise重写最后一个代码狙击手吗?
addTag(title: string) {
const newLabel: CategorySet = { type: 'message', title };
return new Promise((resolve, reject) => {
this.categoryService.add(newLabel).subscribe(res => {
if (res.code === 1) {
// If added, get the list og gategories again
this.getCategoryList();
resolve();
} else {
this.toastr.error(res.message);
reject();
}
});
}