de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 viniciuswebdev
viniciuswebdev
Question

Adalah setTimeout solusi yang baik untuk melakukan async fungsi dengan javascript?

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?

52 2013-10-28T03:16:44+00:00 3
Uwe Keim
Uwe Keim
Pertanyaan edit 2 April 2018 в 6:51
Pemrograman
javascript
jquery
Solution / Answer
 tybro0103
tybro0103
28 Oktober 2013 в 3:35
2013-10-28T03:35:10+00:00
Lebih
Sumber
Sunting
#22638079

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

H. Pauwelyn
H. Pauwelyn
Jawaban edit 23 Juli 2019 в 12:56
67
0
Vaisakh Rajagopal
Vaisakh Rajagopal
26 November 2015 в 9:09
2015-11-26T09:09:05+00:00
Lebih
Sumber
Sunting
#22638080
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.

Vaisakh Rajagopal
Vaisakh Rajagopal
Jawaban edit 4 April 2018 в 5:39
1
0
Shashank Gupta
Shashank Gupta
18 Januari 2019 в 3:55
2019-01-18T15:55:09+00:00
Lebih
Sumber
Sunting
#22638081

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();
0
0
Related communities 2
JavaScript Indonesia
JavaScript Indonesia
14 533 pengguna
Grup JavaScript yang membahas JavaScript, framework JS, dan Node JS secara universal. Cek Pinned Message untuk keterangan lebih lanjut. Komunitas ReactJS: https://t.me/react_idn
Buka telegram
jQuery Indonesia
jQuery Indonesia
343 pengguna
Learning jQuery & Solve Problem
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 2 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi