首页 > 解决方案 > 如何使函数在javascript中同步执行?或者如何让函数一个接一个地执行?

问题描述

这是我的功能

function two(){
    console.log('two')

}

function one(callback){
    setTimeout(()=>{
        console.log('one')        
    },2000)
    callback()
}

one(two)

实际输出:

two  
one  

我的预期输出:

one  
two  

我的问题是如何对这些函数进行更改,以便在函数 one() 之后执行函数 two()

标签: javascriptclosures

解决方案


你可以像这样简单地调用callback()setTimeout的匿名函数:

function two() {
  console.log('two')
}

function one(callback) {
  setTimeout(() => {
    console.log('one');
    callback(); // execute callback after everything in setTimeout is executed
  }, 2000);
}
one(two);

...或者,您可以使用PromiseES7 的async/await(或使用.then()回调)功能,如下所示:

function two() {
  console.log('two')
}

async function one(callback) { // make async so we can use `await`
  await new Promise((resolve, rej) => { // wait for the promise to resolve ... 
    setTimeout(() => {
      console.log('one');
      resolve();
    }, 2000)
  });
  callback(); // ... then execute the callback
}
one(two);


推荐阅读