Searching di web tentang async fungsi, saya menemukan banyak artikel yang menggunakan setTimeout untuk melakukan pekerjaan ini:
window.setTimeout(function() {
console.log("second");
}, 0);
console.log("first");
Output:
first
second
Ini bekerja, tapi adalah praktek terbaik?
setTimeout(function(){...}, 0)
hanya antrian kode untuk dijalankan sekali saat panggilan stack selesai mengeksekusi. Ini dapat berguna untuk beberapa hal]1.
Jadi ya, itu's asynchronous yang rusak sinkron aliran, tapi itu's tidak benar-benar akan mengeksekusi secara bersamaan/di thread terpisah. Jika tujuan anda adalah pemrosesan latar belakang, melihat-lihat di webworkers. Ada's juga cara untuk menggunakan iframe untuk pemrosesan latar belakang.
Update:
Untuk lebih memperjelas, ada's perbedaan antara concurrency/pelatarbelakangan dan asynchronous-ness. Ketika kode asinkron yang cukup berarti bukan't dieksekusi secara berurutan. Pertimbangkan:
var foo='poo';
setTimeout(function() {
foo='bar'
}, 100);
console.log(foo);
Nilai 'poo' akan waspada karena kode tidak akan dieksekusi secara berurutan. The 'bar' nilai ditugaskan secara asinkron. Jika anda perlu waspada nilai foo
ketika itu asynchronous penugasan yang terjadi, menggunakan callback:
/* contrived example alert */
var foo = 'poo';
function setFoo(callback) {
setTimeout(function() {
foo = 'bar';
callback();
}, 100);
};
setFoo(function() {
console.log(foo);
});
Jadi ya, ada's beberapa asynchronous-an yang terjadi di atas, tapi itu's semua terjadi dalam satu benang sehingga tidak ada tunjangan kinerja.
Ketika operasi membutuhkan waktu yang lama, itu adalah terbaik untuk melakukan hal ini di latar belakang. Dalam kebanyakan bahasa ini dilakukan dengan mengeksekusi operasi pada thread baru atau proses. Dalam (browser) javascript, kita don't memiliki kemampuan untuk membuat thread baru, tapi dapat menggunakan webworkers atau iframe. Karena kode ini berjalan di latar belakang istirahat berurutan aliran hal itu adalah asinkron.
TLDR: Semua dilatarbelakangi/kode bersamaan terjadi asynchronous, namun tidak semua kode asinkron terjadi secara bersamaan.
Lihat Juga: https://stackoverflow.com/questions/11233633/understanding-asynchronous-code-in-laymans-terms
var foo = 'poo';
setTimeout(function() {foo = 'bar'}, 100);
alert(foo);
Koreksi kecil untuk @tybro0103 's jawaban, selama pelaksanaan 'alert(foo)' nilai 'poo' tidak akan berubah karena kode tidak akan dieksekusi secara berurutan. The 'bar' nilai ditugaskan secara asinkron dan itu akan mengeksekusi hanya setelah 100 milidetik, dengan waktu yang waspada akan dieksekusi.
Nilai foo tetap tidak berubah, selama pelaksanaan garis waspada(foo). Dan akan berubah nanti pada waktu. Cek @wisnu-lia komentar.
Secara default, JavaScript asynchronous setiap kali bertemu async function, itu antri yang berfungsi untuk nanti. Tetapi jika anda ingin jeda js untuk anda dapat melakukannya menggunakan menjanjikan Kasus 1: output hello(tidak akan menunggu untuk 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();
kasus 2: output done1(akan menunggu 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();