仅当使用Angular 6完成另一个方法时调用该方法

仅当使用Angular 6完成另一个方法时调用该方法,angular,typescript,Angular,Typescript,在ngOnInit期间,我必须执行2个方法,但是只有在method1完全完成时,才能执行method2。我不做HTTP请求,这两种方法属于同一个组件 ngOnInit() { this.method1(); this.method2(); //need to be executed only when method1() is finished } method1() { //do something } method2() { //do

在ngOnInit期间,我必须执行2个方法,但是只有在method1完全完成时,才能执行method2。我不做HTTP请求,这两种方法属于同一个组件

  ngOnInit() {
    this.method1();
    this.method2(); //need to be executed only when method1() is finished
  }

  method1() {
    //do something
  }

  method2() {
    //do something but need to be started only when method1 is finished
  }

这个问题的最佳解决方案是什么?

如果他们不执行异步操作,为什么不在method1内部的method2完成自己的操作后调用它呢

ngOnInit() {
  this.method1();
}

method1() {
  //do something

  //completed running method1 operations so call this.method2 now
  this.method2();
}

method2() {
  //do something but need to be started only when method1 is finished
}

你的代码完全有效。如果您不执行任何异步操作,那么依次执行一个函数、语句和表达式是默认行为

即使在调用异步操作时,所有剩余语句和表达式仍以同步方式执行,直到到达调用堆栈的末尾。异步操作放在事件循环上,稍后执行

异步操作的示例不仅包括HTTP调用,还包括setTimeout和setInterval


您可以阅读有关事件循环的更多信息。

如果您不执行任何异步操作,则这是默认行为……如果它是异步的,您可以在第一个方法回调中调用第二个方法,即使method1执行更复杂的任务,method2也只会在1完成时启动?当然,如果它包含同步代码,即使它永远都是无限循环,它也会永远阻止代码的其余部分哦,好吧,我一直认为javascript总是异步的。。。谢谢你的关注没有理由比把它们都放在ngOnInit里更好。这个回答误导了提问者,使他认为这是实现他想要的东西所必需的,但事实并非如此。@DavidWalschots有两个问题。1.这是如何误导提问者的?答案是为什么你不这样做,这显然是在问OP他是否已经考虑过这个选项。它没有回答,因为这是唯一的方法。2.根据这些信息,这显然是在执行method1操作之后执行method2的更好方法之一。您并没有告诉询问者他的代码也可以工作。我不明白为什么这显然是更好的方式:-。也许method1和method2是不相关的,在这种情况下,从1调用2并不更好。同样,我不明白当它被解读为可能的选项之一时,这是如何误导的。根据给出的信息,方法2应遵循方法1。因此,它们很可能是相关的。使用我发布的方法,你不必同时使用两种不同的方法,这样,如果你在未来做出任何改变,这种关系将保持不变。这些考虑因素不是问题的一部分。问题是需要修改什么才能使这两个函数一个接一个地执行。答案是什么都没有。