Уточнение функции обратного вызова - PullRequest
0 голосов
/ 14 сентября 2018

У меня настроена функция обратного вызова javascript, подобная этой

function myFunction(callback){

    $('meta[name="viewport"]').prop('content', 'width=1440');
    //other code
    callback()
}

function otherFunction(){
   //some async operation
}

myFunction(otherFunction)

Гарантирует ли этот код, что мой otherFunction не запускается до изменения области просмотра и реализации другого кода над ним?

Ответы [ 4 ]

0 голосов
/ 14 сентября 2018

Да, это гарантирует, что myFunction будет запускаться после всего кода над ним, если и только если код выше callback() также является синхронным. В примере гарантируется, что callback() будет выполняться только после изменения области просмотра.

0 голосов
/ 14 сентября 2018

Вот лучший способ разобраться в этом. Здесь я добавил заявление как раз перед callBack function. Вы можете увидеть журнал консоли даже после выполнения otherfunction. Таким образом, все зависит от того, используете ли вы код synchronous или asynchronous перед функцией invocation.

function myFunction(callback){

    $('#ipt').val(callback.name);
    //other code
    setTimeout(function(){console.log('hello')},5000)
    callback()
}

function otherFunction(){
   alert( $('#ipt').val());
}

myFunction(otherFunction)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="text" id="ipt" placeholder="Dummy text"/>
0 голосов
/ 14 сентября 2018

Функции асинхронного обратного вызова всегда будут запускаться после завершения всего синхронного кода.Это связано с тем, что в JS есть нечто, называемое циклом обработки событий, который выглядит следующим образом:

enter image description here

Всякий раз, когда мы часто выполняем асинхронную операцию, это связано с веб-API,Этот веб-API удален от нас.Нам не нужно знать, как браузер реализует эту функцию (которая, вероятно, написана на C ++ как часть браузера).Тем не менее, нас интересует значение операции или возможное возвращаемое значение.

Итак, что делает браузер, когда веб-интерфейсы завершаются, обратный вызов, связанный с ним, помещается в очередь обратного вызова .Затем всякий раз, когда стек пуст, цикл обработки событий помещает функцию в стек.

Именно поэтому асинхронные операции всегда будут выполняться последними, , поскольку цикл обработки будет ожидать, пока стек не будет пусттолкая предмет на нем.

0 голосов
/ 14 сентября 2018

Если весь код выше вызова callback является синхронным, то да, otherFunction будет запускаться после всего кода выше.

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