Saya mengalami kesulitan memahami javaScript promises
. Saya menulis kode berikut:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
Saya segera melihat ini di konsol pengembang Chrome saya:
Tetapi setelah saya menunggu 5 detik, pesan secara otomatis berubah menjadi hitam seperti gambar ini:
Saya belum pernah melihat perilaku ini sebelumnya antara kode javaScript saya dan konsol pengembang, di mana kode javaScript saya dapat "memodifikasi konten yang ada" di konsol pengembang.
Jadi saya memutuskan untuk melihat apakah situasi yang sama terjadi dengan resolve
menulis kode ini:
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
Tetapi dalam situasi ini, konsol pengembang saya tidak menunjukkan apa-apa sampai 5 detik kemudian, yang kemudian dicetak hello world
.
Mengapa resolve
dan reject
diperlakukan begitu berbeda dalam hal ketika mereka dipanggil?
TAMBAHAN
Saya juga menulis kode ini:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log("errors",e)),5000);
setTimeout(()=>p.catch(e=>console.log("errors 2",e)),6000);
setTimeout(()=>p.catch(null),7000);
Ini menyebabkan beberapa keluaran ke konsol pengembang. Kesalahan merah pada waktu 0, merah berubah menjadi hitam pada waktu 5 detik dengan teks errors hello world
, kemudian pesan kesalahan baru pada waktu 6 detik errors 2 hello world
, kemudian pesan kesalahan merah pada waktu 7 detik. Sekarang saya sangat bingung berapa kali reject
benar-benar dipanggil .... Saya tersesat ...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });
bisa ditulis secara lebih idiomatis dan ringkas sebagaivar p = Promise.reject(Error("hello world"));
:-)