问题-基于Angular doc,对于我的观察对象,何时使用next和complete更合适?
我正在浏览某人的Angular 7项目,下面看到很多代码,其中一些调用使用next,有些仅使用complete,而我试图根据何时使用适当的代码。 Angular doc,因为下一个是“必填”,而完成是“可选”。
login() {
this.authService.login(this.model).subscribe(next => {
this.alertService.success('Logged in successfully');
}, error => {
this.alertService.danger(error);
}, () => {
this.router.navigate(['/home']);
});
}
register() {
this.authService.register(this.user).subscribe(() => {
this.showRegistrationComplete = true;
}, error => {
// handle the error code here
}
);
}
在某些情况下,我看到“下一个”,而在某些情况下,我看到了“()”完成了订阅。
以上两个调用都在下面调用(将方法发布到控制器)
login(model: any) {
return this.http.post(this.baseUrl + 'login', model).pipe(
map((response: any) => {
const user = response;
if (user) {
// do some stuff
}
})
);
}
register(model: any) {
return this.http.post(this.baseUrl + 'register', model);
}
如果我在下面看到此内容会发生什么-是“完成”还是“下一个”,因为它是订阅中的第一个参数?
this.authService.login(this.model).subscribe(() => {
this.alertService.success('Logged in successfully');
this.router.navigate(['/home']);
}, error => {
this.alertService.danger(error);
});
答案 0 :(得分:1)
订阅一个Observable就像调用一个函数,提供 数据将传递到的回调。
可观察对象可以发送三种类型的通知:Next
,Error
,Complete
。
Next
通知发送诸如 Number , String , Object 等值。< / p>
Error
通知发送JavaScript错误或异常。
Complete
通知未发送值。
在subscribe()
方法中,我们提供了三个回调来接收这三种类型的通知。回调的顺序很重要,它们依次对应于Next
,Error
和Complete
。
在下面的代码中,第一个回调中的参数next
可以命名为任何名称,其名称没有任何意义。
this.authService.login(this.model).subscribe(next => {
this.alertService.success('Logged in successfully');
});
当第一个回调中没有参数时,我们不会捕获可观察对象发送的值。当我们只关心知道要发送的值但不关心实际发送的值时,可以忽略使用参数。
this.authService.login(this.model).subscribe(() => {
this.alertService.success('Logged in successfully');
this.router.navigate(['/home']);
}, error => {
this.alertService.danger(error);
});
在上面的代码段中,我们将不会收到发送的值,但是每发送一个值都会触发警报。这里我们没有第三个回调,因此当可观察对象完成时我们不会收到通知。
在我的观察范围内,何时使用next和complete更合适?
使用第一个回调从可观察对象接收值。
使用第二个回调来处理任何错误。
在可观察对象完成时,使用第三个回调执行任何任务。
还请注意,Error
和Complete
通知在可观察的执行期间只能发生一次,并且只能有一个。因此,当发生错误时,将不会调用第三个回调。