Как заставить функции выполняться синхронно в JavaScript? или как заставить функции выполнять одну за другой? - PullRequest
0 голосов
/ 30 октября 2019

Вот моя функция

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

}

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

one(two)

Фактический результат:

two  
one  

Мой ожидаемый результат:

one  
two  

Мой вопрос заключается в том, как внести изменения в этифункции, так что функция two () будет выполняться после функции one ()

Ответы [ 3 ]

2 голосов
/ 30 октября 2019

Вы можете просто вызвать 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() callback) возможности, такие как:

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 голос
/ 30 октября 2019

Это работает

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


one.then((value) => {
    console.log('two')
})
0 голосов
/ 30 октября 2019

Я думаю, что обратный вызов будет вызван перед другим выполнением. Это также работает.

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

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

    one('one', two);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...