Функция обратного вызова после setTimeout - PullRequest
1 голос
/ 23 марта 2019

Я не получаю желаемых результатов с помощью этого обратного вызова. Я пытаюсь написать простой обратный вызов, который выполняется после завершения setTimeout, однако сначала я вижу выполнение функции обратного вызова, а затем фактическую функцию.

Что мне здесь не хватает? чтобы получить результаты, как показано ниже.

doing my homework Maths
finished my homework

Вот код, который я пытаюсь запустить.

function doHomeWork(subject, callback){
setTimeout(function(){console.log("doing my homework:", subject)},500)
callback();
}

doHomeWork("Maths", function(){console.log("finished my homework");});

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Когда вы звоните setTimeout(), регистрируется обратный вызов браузера.Это не означает, что последующие операторы также будут выполнены позже.Они будут выполнены сразу после вызова функции setTimeout().Только параметр функции, который вы передали, будет вызываться setTimeout(), когда истечет время ожидания.Таким образом, если обратный вызов необходимо выполнить после setTimeout() параметризованной функции.Этот вызов лучше перенести в параметр функции setTimeout().Итак, код будет выглядеть как

setTimeout(function() {
    //Your stuff
    callback();
}, 500);
0 голосов
/ 23 марта 2019

Вы неправильно понимаете использование setTimeout.

Правильная реализация того, что вы просите:

function doHomeWork(subject, callback){
    setTimeout(callback,500);
    console.log("doing my homework:", subject)
}

doHomeWork("Maths", function(){console.log("finished my homework");});

Когда вы вызываете doHomeWork, вы делаете две вещи (две строки кода): 1. Скажите браузеру, чтобы он добавлял обратный вызов как новое задание, которое будет выполнено через 500 мс. 2. Распечатать console.log (...)

Через 500 мс браузер добавит новую задачу с обратным вызовом.

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