【发布时间】:2020-04-10 19:27:04
【问题描述】:
【问题讨论】:
-
isAuthenticated()是一个异步调用,当它执行时会返回true,然后会从函数中返回。
标签: javascript angular promise return
【问题讨论】:
isAuthenticated() 是一个异步调用,当它执行时会返回true,然后会从函数中返回。
标签: javascript angular promise return
这与承诺无关。 return 语句总是从它所在的最内层函数返回。
但是,magic of promises 是 then 回调的返回值成为外部 promise 的分辨率值,这是您从外部函数返回的值。
【讨论】:
.then() 的回调在 isAuthenticated() 解析了 promise 的值(传递给 authenticated 参数)后被触发。因此,如果我没有调用.then() 并返回true,我的promise 仍然不会包含我在最初创建promise 时触发的回调中resolve()'d 的值?
.then() 之前返回一个未定义值的承诺?如果我想在调用canActivate() 的函数中使用这个promise,我是否需要执行一些空检查以确保.then() 已经完成? .then() 甚至被异步调用了吗?
then(然后,您将购买法拉利),但在您获得那百万美元之前,您实际上无法这样做(好吧,我不知道您的信用评级,但我们不要离题)。在我看来,“Promise”是软件中最伟大的名字之一,因为它捕捉到了正在发生的事情。 @TheThing
.then() 本身是同步调用的,为了创建该承诺,您传递的回调始终被异步调用。
.then() 块之外处理承诺,因为从技术上讲,我们可以将它返回给调用函数。主要面向用例
首先:请不要将代码作为嵌入图像发布,这会使回答变得更加困难。
第二:你也可以引入一个中间变量,这样写你的函数:
canActivate() {
const returnedPromise = this.authService.isAuthenticated()
.then(this.processAuthenticationValue);
return returnedPromise;
}
private processAuthenticationValue = (authenticated: boolean) => {
if (authenticated) {
return true;
} else {
this.router.navigate(['/']);
}
}
所以,这就是发生的事情:isAuthenticated() 被调用并返回一些承诺。 then 附加在其承诺链的末尾(then 在 processAuthenticationValue 方法中定义)。从canActivate返回的是整个链。
【讨论】:
.then 在return 之后触发怎么办?
then 下的内容被执行之前到达return 语句。其次,promise 的存在只是为了处理这个问题。