Поиск в интернете о асинхронных функций, я нашел много статей с помощью setTimeout, чтобы сделать эту работу:
window.setTimeout(function() {
console.log("second");
}, 0);
console.log("first");
Выход:
first
second
Это работает, но это лучшая практика?
функции setTimeout(функция(){...}, 0)
просто очереди код, который будет выполняться один раз в текущем стеке вызовов не завершит выполнение. Это может быть полезно для некоторых вещей]1.
Так что да, она'с асинхронной в том, что он нарушает синхронный поток, но это'ов на самом деле не собирается выполнять одновременно/в отдельном потоке. Если вашей целью является фоновая обработка, взгляните на webworkers. Там's также способ использовать фреймы для фоновой обработки.
Обновление:
Для дальнейшего уточнения, там'ы разница между параллелизмом/фоновый режим и асинхронный-Несс. Когда код является асинхронным, что означает, что он вовсе'т выполняются последовательно. Рассмотрим:
в
var foo='poo';
setTimeout(function() {
foo='bar'
}, 100);
console.log(foo);
в
Значение 'ПУ' будете предупреждены, потому что код не выполняются последовательно. В 'бар' значение был назначен асинхронно. Если вам нужно насторожиться значение фу
, когда, что асинхронные назначение произойдет, использовать обратные вызовы:
в
/* contrived example alert */
var foo = 'poo';
function setFoo(callback) {
setTimeout(function() {
foo = 'bar';
callback();
}, 100);
};
setFoo(function() {
console.log(foo);
});
в
Так что да, там's некоторые асинхронные-Несс происходит выше, но это's все происходит в одном потоке, так что нет никаких преимуществ в производительности.
Когда работа занимает много времени, то лучше делать это в фоновом режиме. В большинстве языков это делается путем выполнения операции на новый поток или процесс. В (браузер) для JavaScript, мы не'т иметь возможность создавать новые темы, но можно использовать webworkers и iframes. Поскольку этот код выполняется в фоновом режиме нарушает последовательность вещей, он является асинхронным.
Номер: все справочная/параллельного кода происходит асинхронно, но не всех асинхронного кода происходит одновременно.
См. также: https://stackoverflow.com/questions/11233633/understanding-asynchronous-code-in-laymans-terms
var foo = 'poo';
setTimeout(function() {foo = 'bar'}, 100);
alert(foo);
Небольшая поправка к @tybro0103 'ы ответьте, во время исполнения 'предупреждение(ФОО)' значение 'ПУ' не изменится, потому что код был не выполняются последовательно. В 'бар' значение был назначен асинхронно и он будет выполняться только после 100 миллисекунд, что оповещения будут исполнены.
Значение фу остается неизменным, во время выполнения предупреждение линии(фу). И изменятся на время. Проверить @Вишал-Лиа комментарий.
По умолчанию JavaScript-это асинхронный при обнаружении функция async, это очереди, которые функционируют на потом. Но если вы хотите приостановить JS для Вы можете сделать, это использовать обещания Случай 1: выходной привет(не буду ждать через setTimeout)
//async
function myFunction() {
let result1='hello'
//promise =new Promise((resolve,reject)=>{
setTimeout(function(){
resolve("done");
result1="done1";
}, 3000);
//});
//result = await promise
alert(result1);
}
myFunction();
случай 2: выход done1(будем ждать через setTimeout) https://jsfiddle.net/shashankgpt270/1o79fudt/
async function myFunction() {
let result1='hello'
promise =new Promise((resolve,reject)=>{
setTimeout(function(){
resolve("done");
result1="done1";
}, 3000);
});
result = await promise
alert(result1);
}
myFunction();