Выполнение метода с помощью обратного вызова в JavaScript

1

Я знаю, что 2 будет сначала console.logged, а затем 1. Есть ли способ, может быть, с помощью обратных вызовов, я могу показать сначала 1, а затем 2?

function first(){
  // Simulate a code delay
  setTimeout( function(){
    console.log(1);
  }, 500 );
}
function second(){
  console.log(2);
}
first();
second();
  • 0
    Вызовите second() по таймауту
  • 0
    Не звоните first или second ; просто сделайте console.log(1); console.log(2); ,
Показать ещё 2 комментария
Теги:

4 ответа

1
Лучший ответ

Поместите second() вызов в setTimeout:

function first(){
  // Simulate a code delay
  setTimeout( function(){
    console.log(1);
    second();
  }, 500 );
}
function second(){
  console.log(2);
}
first();

Вы также можете полностью обойти first, second и setTimeout:

console.log(1);
console.log(2);
1

function second(){
  console.log(2);
}

function first(cb){
  // Simulate a code delay
  return setTimeout( function(){
    console.log(1);
     cb();
  }, 500 );
   
}

first(second);
0

не используйте вызов тайм-аута в first функции. или вы можете использовать promises

для лучшего понимания порядка выполнения callback event loop прочитайте эту ссылку на статью. эта статья объясняет порядок выполнения, который получает приоритет среди обещаний, тайм-аутов и т.д.

Надеюсь, это поможет

0

Решите это, пообещав клан и элегантный способ:

function second() {
	console.log("test2", 2);
}

function first() {
	var promise = new Promise(function (resolve, reject) {
		setTimeout(function () {
			console.log("test1", 1);
			resolve();
		}, 500);
	});
	return promise;
}

first().then(function () {
	second();
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню