Saya telah membaca beberapa artikel tentang hal ini, tetapi masih belum jelas bagi saya jika ada perbedaan antara Promise.reject
vs melempar kesalahan. Sebagai contoh,
Menggunakan Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
Menggunakan lemparan
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
Preferensi saya adalah menggunakan throw
hanya karena lebih pendek, tetapi bertanya-tanya apakah ada kelebihan satu di atas yang lain.
throw
adalah bahwa itu tidak akan menghasilkan janji yang ditolak jika dilempar dari dalam panggilan balik yang tidak sinkron, seperti setTimeout. jsfiddle.net/m07van33 @Blondie jawaban Anda benar.
reject
dari daftar param saya.
.then()
handler menangkap pengecualian dilemparkan dan mengubahnya menjadi sebuah janji ditolak secara otomatis. Karena saya telah membaca bahwa pengecualian yang dilemparkan tidak terlalu cepat untuk dieksekusi, saya akan menduga bahwa mengembalikan janji yang ditolak mungkin sedikit lebih cepat untuk dieksekusi, tetapi Anda harus merancang tes di beberapa browser modern jika itu penting untuk diketahui. Saya pribadi menggunakanthrow
karena saya suka keterbacaan.