Kod:
var der = {};
var p = new Promise(function (resolve, reject) {
der.reject = reject;
})
p.then((v) => {
console.log('resolve');
console.log(v);
})
p.catch(function (v) {
console.log(v);
console.log('reject');
console.log(v);
});
der.reject(p);
console.log(p);
Hanya menolak adalah output di bawah Firefox, tetapi input biasanya di bawah Chrome, dan kemudian Uncaught (dalam janji) akan muncul
Maafkan saya, mengapa pengecualian yang tidak ditangkap berlaku? Tangkapan p ditakrifkan dengan jelas, dan mengapa output Firefox hanya ditolak, dan operasi mengeluarkan p tidak mempunyai kesan (sebenarnya, ia sepatutnya disebabkan oleh pengecualian yang tidak ditangkap)
Tambahan:
Sebab pengecualian yang tidak ditangkap ialah walaupun fungsi kedua tidak ditakrifkan pada masa itu, maka masih dijalankan, dan punca dan status diserahkan kepada objek Promise baharu yang dikembalikan Objek Promise yang dikembalikan tidak mempunyai panggilan balik tangkapan. jadi pengecualian dilaporkan
Tetapi sebab mengapa mengeluarkan p dalam Firefox tidak mempunyai kesan masih tidak jelas
Promise adalah bersamaan dengan standard Mana-mana prototaip yang mematuhi piawaian boleh dipanggil janji Pelayar yang berbeza mungkin mempunyai ciri yang berbeza di luar standard. Jelas sekali, Firefox percaya bahawa .catch dan .then boleh diisytiharkan secara berasingan, dan kemudian pada masa jalan. Respons, iaitu, tiada ralat dilaporkan seperti yang anda sebutkan di atas; dan Google percaya bahawa .catch harus dikendalikan bersama-sama dengan pengecualian dalam .then, jadi ia perlu digunakan pada janji selepas .then. Jika anda menggunakan .then().catch together, Google tidak akan melaporkan ralat. Sebab asasnya mungkin satu berdasarkan peristiwa dan satu lagi berdasarkan tinjauan pendapat.