Метод setTimeout является хорошим решением, чтобы сделать асинхронных функций с помощью JavaScript?

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

window.setTimeout(function() {
   console.log("second");
}, 0);
console.log("first");

Выход:

first
second

Это работает, но это лучшая практика?

Комментарии к вопросу (14)
Решение

функции 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

Комментарии (0)
var foo = 'poo';
setTimeout(function() {foo = 'bar'}, 100);
alert(foo);

Небольшая поправка к @tybro0103 'ы ответьте, во время исполнения 'предупреждение(ФОО)' значение 'ПУ' не изменится, потому что код был не выполняются последовательно. В 'бар' значение был назначен асинхронно и он будет выполняться только после 100 миллисекунд, что оповещения будут исполнены.

Значение фу остается неизменным, во время выполнения предупреждение линии(фу). И изменятся на время. Проверить @Вишал-Лиа комментарий.

Комментарии (6)

По умолчанию JavaScript-это асинхронный при обнаружении функция async, это очереди, которые функционируют на потом. Но если вы хотите приостановить JS для Вы можете сделать, это использовать обещания Случай 1: выходной привет(не буду ждать через setTimeout) https://jsfiddle.net/shashankgpt270/h0vr53qy/

//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();
Комментарии (0)