Jika objek Promise menolak dirinya sendiri - Limpahan Tindanan
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-14 10:53:56
0
2
725

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

女神的闺蜜爱上我
女神的闺蜜爱上我

membalas semua(2)
伊谢尔伦
var der = {};

var p = new Promise(function (resolve, reject) {
    der.reject = reject;
})
// 下面修改成这个样子,因为then内部的处理函数也需要异常捕获
p.then((v) => {
    console.log('resolve');
    console.log(v);
}).catch(function (v) {
    console.log(v);
    console.log('reject');
    console.log(v);
});

der.reject(p);
console.log(p);
学霸

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan