2017-02-17 4 views
2

Я начинаю программист на javascript. Я пытаюсь понять асинхронный javascript, но я хотел прояснить пару вещей.Ищет разъяснение об асинхронном javascript

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

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

jQuery.get('page.html', function (data) { 
    console.log("second"); 
}); 
console.log('first'); 

Что это в частности, что делает обратный вызов в параметре здесь выполняться позднее? Разве что метод get здесь заранее определен как какой-то специальный метод (потому что он извлекает файл), что если вы передаете функцию в качестве второго параметра, она ведет себя асинхронно?

Как вы можете выполнять функции, которые вы бы назвали асинхронными?

Благодаря

+2

Большинство асинхронных API-интерфейсов являются встроенными в браузере, такими как XMLHTTPRequest (сетевой ввод-вывод) или обработка событий. Поскольку они асинхронны, API-интерфейсы JavaScript, взаимодействующие с этими API-интерфейсами, должны быть реализованы с учетом этого. –

+0

Взгляните на [это] (http://stackoverflow.com/questions/13671798/is-get-of-jquery-asynchronous). 'jQuery.get' является оберткой вокруг' JS XMLHttpRequerst' с асинхронной опцией, установленной в true. Поэтому он ведет себя асинхронно. – NDFA

+1

Еще одно замечательное объяснение [JS, Async или Not!] (Http://stackoverflow.com/questions/13806695/what-is-a-simple-example-of-an-asynchronous-javascript-function#answer-13806828) – NDFA

ответ

1

Это может быть одна из нескольких вещей, что делает асинхронный код асинхронным:

  • Таймера событий (т.е. setTimeout() и setInterval(), каждый из которых принимают функцию обратного вызова в качестве аргументов, которые они выполняют в более позднее время)
  • События DOM (т.е. присоединение прослушивателя событий с функцией обратного вызова к элементу HTML или другому узлу DOM, и в этом случае ваша функция обратного вызова выполняется при запуске этого события)
  • Другие API, предоставляемые браузером (т. XMLHTTPRequest, который излучает события, основанные на вещах браузер изначально под капотом)
  • В Node.js или аналогичной среде, любые серверной библиотеки ввода/вывода, которые непосредственно получить доступ к ресурсам, таких как диски или сети

Вообще говоря, setTimeout() и setInterval() являются только транспортными средствами для асинхронного выполнения в родных JS (в отличие от DOM, браузера или других API, предоставляемое конкретной средой выполнения)

в случае вашего примера, .get Jquery по методе() является просто оболочкой для API браузера XMLHTTPRequest, который создает новый объект XHR th в свою очередь, испускает события на основе состояния HTTP-запроса и присоединяет слушателей с обратными вызовами к этим событиям.

Смежные вопросы