Saya mengalami perilaku yang tidak konsisten di Google Chrome 60.0.3112.78 (Pembuatan Resmi) (64-bit) saat menggunakan async/menunggu ES6+ modern, bergantung pada apakah saya menggunakan tanda kurung di fungsi panah yang mengembalikan Janji. Hal yang sama terjadi di Node.js. Saya kesulitan memahami alasannya.
Saya memahami bahwa ini bukan cara mengimplementasikan fungsi sleep() tetapi ini adalah cara termudah untuk mendemonstrasikannya. Perhatikan cuplikan kode contoh berikut.
function sleep(ms = 0) {
return new Promise(resolve => setTimeout(resolve, ms));
}
(async () => {
console.log('a');
await sleep(5000);
console.log('b');
})()
Seperti yang diharapkan, ini akan menulis a ke konsol, tunggu 5 detik dan kemudian menulis b ke konsol.
Notasi yang lebih pendek menggunakan fungsi panah untuk mengembalikan Janji.
const sleep = ms => { return new Promise(resolve => setTimeout(resolve, ms)) }
(async () => {
console.log('a');
await sleep(5000);
console.log('b');
})()
Seperti yang diharapkan, kode ini berperilaku sama. a dan b ditulis ke konsol dengan interval 5000 milidetik di antaranya.
Kode berikut tidak berfungsi. Satu-satunya perbedaan adalah saya tidak membungkus kembalinya Janji dalam tanda kurung pada baris pertama.
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
(async () => {
console.log('a');
await sleep(5000);
console.log('b');
})()
Dalam hal ini, menunggu tidur tidak berfungsi. Faktanya, kode ini tidak melakukan apa pun. Itu tidak mencatat apa pun ke konsol, tidak a dan tidak b.
Saya menganggap diri saya cukup berpengalaman tetapi saat ini saya tidak memahami hal ini. Mengapa tanda kurung penting dalam kasus khusus ini? Nilai kembaliannya identik, bukan? Dan kenapa karakter a tidak dicatat di konsol?
Seseorang tolong jelaskan kepada saya secara tepat dan spesifik mengapa hal ini terjadi. Apakah ini bug atau saya sendiri yang hanya perlu tidur?
Terima kasih banyak.
function sleep(ms) { return … }
) yang tidak memerlukan titik koma sama sekali :-) - person Bergi   schedule 05.08.2017