Dalam beberapa hari ini, saya telah membaca banyak catatan teknikal tentang "janji" saya terpesona dengan mereka, dan saya hanya mempunyai sedikit pengetahuan tentang mereka untuk memahami secara kasar fungsi mereka.
Betul tentang masalah yang paling banyak digunakan. paling bebas masalah Semua kaedah disegerakkan, tetapi hasilnya adalah pengalaman yang mengerikan Halaman itu membeku dan pemuatan terhenti Perkara yang menjijikkan tentang menggunakan operasi tak segerak ialah lapisan demi lapisan panggilan balik dan lebih banyak operasi bergantung.
function Promise(fn) {
var state = 'pending';
var value;
var deferred = null;
function resolve(newValue) {
if(newValue && typeof newValue.then === 'function') {
newValue.then(resolve, reject);
return;
}
state = 'resolved';
value = newValue;
if(deferred) {
handle(deferred);
}
}
function reject(reason) {
state = 'rejected';
value = reason;
if(deferred) {
handle(deferred);
}
}
function handle(handler) {
if(state === 'pending') {
deferred = handler;
return;
}
var handlerCallback;
if(state === 'resolved') {
handlerCallback = handler.onResolved;
} else {
handlerCallback = handler.onRejected;
}
if(!handlerCallback) {
if(state === 'resolved') {
handler.resolve(value);
} else {
handler.reject(value);
}
return;
}
var ret = handlerCallback(value);
handler.resolve(ret);
}
this.then = function(onResolved, onRejected) {
return new Promise(function(resolve, reject) {
handle({
onResolved: onResolved,
onRejected: onRejected,
resolve: resolve,
reject: reject
});
});
};
fn(resolve, reject);
}
Janji dilahirkan untuk menyelesaikan kawalan aliran tak segerak Inti penggunaannya ialah kaedah kemudian
kemudian kelihatan seperti panggilan balik pada pandangan pertama, tetapi cirinya ialah ia boleh mengendalikan pengecualian dan penulisan berantai beberapa Kebergantungan permintaan ajax adalah seperti berikut:
Kod rujukan:
Kod di atas tidak mengendalikan ralat dan terlalu panjang Jika kebergantungan lebih rumit, anda boleh bayangkan jumlah kod dan mudah untuk membuat kesilapan;
Pemahaman anda pada asasnya betul,
Promise
ia tidak begitu mudah, ia hanya mengurangkan tahap bersarang.Jadi, penyelesaian muktamad ialah
Async/Await
, penyoal boleh menyemak maklumat.Keanggunan adalah satu demi satu, meluruskan bentuk pokok Krismas panggilan semula Ini adalah sumbangan Janji.
Apabila saya menulis program, saya perlu membuat tujuh atau lapan panggilan balik dan Promises adalah lebih baik.
Jika anda rasa menulis itu terlalu menyusahkan, maka jangan gunakannya, gunakan Async/Await