如何使函数在javascript中同步执行?或如何使函数一个接一个地执行?

时间:2019-10-30 04:11:17

标签: javascript closures

这是我的职能

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

}

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

one(two)

实际输出:

two  
one  

我的预期输出:

one  
two  

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

3 个答案:

答案 0 :(得分:2)

您可以像这样在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);

...或者,您可以将Promise与ES7的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);

答案 1 :(得分:1)

这有效

let one = new Promise((resolve, reject) =>{
  setTimeout(()=>{
      console.log('one')
      resolve(true)
  },2000)
})


one.then((value) => {
    console.log('two')
})

答案 2 :(得分:0)

我认为回调将在其他执行之前被调用。这也有效。

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

    function one(one, callback){
        console.log(one);
        callback()
    }

    one('one', two);