【问题标题】:In subscribe assign value to variable.once it is assigned, next method should executed在订阅分配值给变量。一旦分配,下一个方法应该执行
【发布时间】:2020-09-29 23:52:04
【问题描述】:

我需要为订阅中的变量分配一个值,并将该变量传递给一个方法。分配后,我需要执行该方法。现在在分配它之前将默认值分配给该方法并开始执行

例子:

loginIntoApp(){
  this.userService.getIfuserPresent(this.login.firstName,this.login.password).pipe().
       subscribe(data=> {
        this.hasUser = data;
        console.log(`Logging into App` +this.hasUser);
     }
     );

     this.fireEvent(this.hasUser);

  }

所以这里在为订阅中的hasUser赋值之前,下一个方法(fireEvent)正在执行,因此导致第二个方法失败。订阅中的变量是在执行第二个方法后分配的。从订阅返回值需要更多时间。那么我们是否有任何 Operator 订阅以等待下一个方法执行,直到它被分配。

【问题讨论】:

  • 您可以通过添加您实际尝试过的任何代码并说明问题所在来改进这个问题。否则,这个问题就太开放了,值得一票否决。
  • @AntoineB 我同意,现在用户通过添加有用的代码来响应我对更多细节的请求更加清晰。如果您查看编辑历史记录,您会发现您的评论是不必要的。
  • @NathanBeck 你说得对,我到的时候已经有代码了。

标签: angular angular8


【解决方案1】:

根据定义,subscribe() 是异步的,这意味着this.fireEvent(this.hasUser); 将在您的服务返回答案之前被调用。

您必须在 subscribe 调用的结果中调用下一行:

loginIntoApp(){
    this.userService.getIfuserPresent(this.login.firstName,this.login.password).pipe().
        subscribe(data=> {
            this.hasUser = data;
            console.log(`Logging into App` +this.hasUser);

            this.fireEvent(this.hasUser);
        }
    );
}

【讨论】:

  • @user12303682 不要忘记通过勾选旁边的 V 符号将答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2022-12-11
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多