gpt4 book ai didi

javascript - Angular 使用可观察的完整与下一个处理程序以及何时适本地使用每个处理程序

转载 作者:搜寻专家 更新时间:2023-10-30 21:11:23 26 4
gpt4 key购买 nike

问题 - 基于 Angular doc , 什么时候对我的 observable 使用 next 和 complete 更合适?

我正在浏览某人的 Angular 7 项目,我看到很多代码看起来像下面这样,其中一些调用使用 next,一些只使用 complete,我试图知道何时根据Angular doc ,因为 next 是“必需的”,而 complete 是“可选的”。

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
}
);
}

在某些情况下,我会看到“下一个”,而在某些情况下,我会看到“()”已完成订阅。

上面的这两个调用都在下面调用(将方法发布到 Controller )

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);
});

最佳答案

来自 RxJS documentation :

Subscribing to an Observable is like calling a function, providing callbacks where the data will be delivered to.

Observable 可以发送三种类型的通知:NextErrorComplete

  • Next 通知发送一个值,例如 NumberStringObject、等等

  • Error 通知发送 JavaScript 错误或异常。

  • Complete 通知不发送值。

subscribe() 方法中,我们提供了三个回调来接收这三种类型的通知。回调的顺序很重要,它们依次对应于 NextErrorComplete

在下面的代码中,第一个回调中的参数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);
});

在上面的代码片段中,我们不会收到发送的值,但每当发送一个值时都会触发警报。这里我们没有第三个回调,所以当 observable 完成时我们不会收到通知。

什么时候对我的 observable 使用 next 和 complete 更合适?

  • 使用第一个回调从 observable 接收值。

  • 使用第二个回调来处理任何错误。

  • 使用第三个回调在可观察对象完成时执行任何任务。

另请注意,ErrorComplete 通知在可观察执行期间可能只发生一次,并且只能有其中之一。所以当出现错误时,不会调用第三个回调。

关于javascript - Angular 使用可观察的完整与下一个处理程序以及何时适本地使用每个处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58188199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com