Angular 使用 observable complete 与 next 处理程序以及何时适当地使用每个处理程序
Angular using the observable complete vs next handler and when to use each appropriately
问题 - 基于 Angular doc,什么时候对我的 observable 使用 next 和 complete 更合适?
我正在查看某人的 Angular 7 项目,我看到很多代码如下所示,其中一些调用使用 next,一些仅使用 complete,我想知道何时使用合适的是基于 Angular doc,因为 next 是 'required',complete 是 'optional'。
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
}
);
}
在某些情况下,我看到 'next',在某些情况下,我看到“()”已完成订阅。
上面的这两个调用都在下面调用(post 控制器的方法)
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);
}
如果我在下面有这个会发生什么 - 这意味着 'complete' 还是意味着 'next' 因为它是订阅中的第一个参数?
this.authService.login(this.model).subscribe(() => {
this.alertService.success('Logged in successfully');
this.router.navigate(['/home']);
}, error => {
this.alertService.danger(error);
});
Subscribing to an Observable is like calling a function, providing
callbacks where the data will be delivered to.
一个可观察对象可以发送三种类型的通知:Next
、Error
、Complete
。
Next
通知发送一个值,例如 Number、String、对象等
Error
通知发送 JavaScript 错误或异常。
Complete
通知没有发送值。
并且在subscribe()
方法中我们提供了三个回调来接收这三种类型的通知。回调的顺序很重要,它们依次对应 Next
、Error
和 Complete
。
在下面的代码中,第一个回调中的参数next
可以任意命名,它的名字没有任何意义。
this.authService.login(this.model).subscribe(next => {
this.alertService.success('Logged in successfully');
});
当第一个回调中没有参数时,我们不会捕获从 observable 发送的值。当我们只关心知道发送了一个值而不关心发送的实际值时,我们可以忽略参数。
this.authService.login(this.model).subscribe(() => {
this.alertService.success('Logged in successfully');
this.router.navigate(['/home']);
}, error => {
this.alertService.danger(error);
});
在上面的代码片段中,我们不会收到发送的值,但只要发送值就会触发警报。这里我们没有第三个回调,所以当 observable 完成时我们不会收到通知。
我的 Observable 什么时候使用 next 和 complete 更合适?
使用第一个回调从 observable 接收值。
使用第二个回调来处理任何错误。
当可观察对象完成时,使用第三个回调来执行任何任务。
另请注意,Error
和 Complete
通知在可观察执行期间可能只发生一次,并且只能有其中之一。所以当出现错误时,不会调用第三个回调。
问题 - 基于 Angular doc,什么时候对我的 observable 使用 next 和 complete 更合适?
我正在查看某人的 Angular 7 项目,我看到很多代码如下所示,其中一些调用使用 next,一些仅使用 complete,我想知道何时使用合适的是基于 Angular doc,因为 next 是 'required',complete 是 'optional'。
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
}
);
}
在某些情况下,我看到 'next',在某些情况下,我看到“()”已完成订阅。
上面的这两个调用都在下面调用(post 控制器的方法)
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);
}
如果我在下面有这个会发生什么 - 这意味着 'complete' 还是意味着 'next' 因为它是订阅中的第一个参数?
this.authService.login(this.model).subscribe(() => {
this.alertService.success('Logged in successfully');
this.router.navigate(['/home']);
}, error => {
this.alertService.danger(error);
});
Subscribing to an Observable is like calling a function, providing callbacks where the data will be delivered to.
一个可观察对象可以发送三种类型的通知:Next
、Error
、Complete
。
Next
通知发送一个值,例如 Number、String、对象等Error
通知发送 JavaScript 错误或异常。Complete
通知没有发送值。
并且在subscribe()
方法中我们提供了三个回调来接收这三种类型的通知。回调的顺序很重要,它们依次对应 Next
、Error
和 Complete
。
在下面的代码中,第一个回调中的参数next
可以任意命名,它的名字没有任何意义。
this.authService.login(this.model).subscribe(next => {
this.alertService.success('Logged in successfully');
});
当第一个回调中没有参数时,我们不会捕获从 observable 发送的值。当我们只关心知道发送了一个值而不关心发送的实际值时,我们可以忽略参数。
this.authService.login(this.model).subscribe(() => {
this.alertService.success('Logged in successfully');
this.router.navigate(['/home']);
}, error => {
this.alertService.danger(error);
});
在上面的代码片段中,我们不会收到发送的值,但只要发送值就会触发警报。这里我们没有第三个回调,所以当 observable 完成时我们不会收到通知。
我的 Observable 什么时候使用 next 和 complete 更合适?
使用第一个回调从 observable 接收值。
使用第二个回调来处理任何错误。
当可观察对象完成时,使用第三个回调来执行任何任务。
另请注意,Error
和 Complete
通知在可观察执行期间可能只发生一次,并且只能有其中之一。所以当出现错误时,不会调用第三个回调。