在javascript中其他函数执行完成后,如何立即调用函数?

时间:2019-03-20 11:39:28

标签: javascript

您好,我有两个名为function_1和function_2的函数。仅当function_1完成后,才应开始执行function_2。.仅在使用es6语法完成function_1之后,才能调用function_2吗?

下面是代码,

this.function_1();
this.function_2();// this should be called soon after function_1 is done

我尝试过的

 this.function_1(()=> {
    this.function_2();}
    );

但是以上方法似乎无效。有人可以帮我解决这个问题。谢谢。

3 个答案:

答案 0 :(得分:2)

在其他条件相同的情况下,您需要的第一个代码块就是

this.function_1();
this.function_2();

现在,function_1可能会触发一些异步操作,因此在技术上 完成function_1后发生事情

如果要在所有这些操作完成后运行function_2,则function_1必须明确提供一种允许的机制。


传统方法是让function_1接受回调,这种情况将可行:

this.function_1(()=> {
    this.function_2();
});

现代方法是让function_1返回承诺,在这种情况下将可行:

this.function_1()
    .then(()=> {
        this.function_2();
    });

MDN有detailed information about Promises

它还允许您使用await语法提供,使您处于使用async关键字声明的函数中。

async function myFunction() {
    await this.function_1();
    this.function_2();
}

MDN包含有关asyncawait的详细信息。


最后,重复我先前的强调点:function_1必须显式启用这两种方法中的任一种。

答案 1 :(得分:1)

您可以使用Promise,此外,您还可以使用async await

function f1 () {
  return new Promise(res => setTimeout(() => res(console.log('f1')), 1000));
}

function f2() {
  console.log('f2');
}

async function f3() {
  await f1();
  f2();
}

f1().then(f2);
// or with async await syntax
f3();

答案 2 :(得分:0)

考虑function_1会执行一些异步操作。您可以使用简单的回调来实现。

您可以将function_2作为回调传递给function_1。 它告诉function_1,一旦完成执行,就应该调用execute回调函数。

检查一下。

function function_1(callback) {
  console.log('function_1');
  // Do some time consuming action.
  // Below setTimeout is just for demo purpose
  setTimeout(function() {
    callback();
  }, 1000)
}

function function_2() {
  console.log('function_2');
}

function_1(function_2);