Подтвердить что ты не робот

Каков простой пример асинхронной функции javascript?

Я действительно борется здесь, чтобы справиться с написанием асинхронного JavaScript. Не могли бы вы привести пример простой функции JavaScript, которая является асинхронной, написанной на простом JavaScript (и не используя Node.js или JQuery)

4b9b3361

Ответ 1

Сам JavaScript является синхронным и однопоточным. Вы не можете написать асинхронную функцию; У простого JS нет API-интерфейса времени. Не будет побочных эффектов от параллельных потоков.

Что вы можете сделать, это использовать некоторые API, предоставленные вашей средой (Node.js, Webbrowser), которые позволяют планировать асинхронные задачи - с использованием тайм-аутов, ajax, FileAPI, requestAnimationFrame, nextTick, WebWorkers, DOM события, что угодно.

Пример с использованием setTimeout (предоставлен HTML Timing API):

window.setTimeout(function() {
    console.log("World");
}, 1000);
console.log("Hello");

Обновление. Поскольку ES6 существует promises как асинхронный примитив, встроенный в обычный JavaScript, вы можете сделать

 Promise.resolve("World").then(console.log); // then callbacks are always asynchronous
 console.log("Hello");

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

Ответ 2

Это асинхронно:

setTimeout(function(){
   console.log('1');
}, 2000);

console.log('2');

2 будет записано на консоль до 1. Поскольку setTimeout является асинхронным.

Ответ 3

Вот один очень простой пример:

for (var i = 0; i < 10; i++) {
  window.setTimeout(function() {
    console.log(i);
  }, 2000);
}

Вы можете ожидать, что эти вызовы console.log() показывают вам 0, 1, 2 и т.д., как в этом фрагменте:

for (var i = 0; i < 10; i++) {
  console.log(i);
}

Но на самом деле будет напечатано только 10! Причина, по которой функции, переданные в функцию setTimeout (как ее аргумент обратного вызова), будут вызываться после завершения цикла for, т.е. После i значение установлено равным 10.

Но вы должны понимать одно: все JavaScript в браузере выполняется в одном потоке; асинхронные события (такие как щелчки мыши и таймеры) выполняются только при открытии очереди выполнения. Здесь блестящая статья, написанная Джоном Ресигом по этой теме.