Coretan kod 1
var prepayment_apply,prepayment_operational;
//
loadMain().then(loadBtn()).then(function () {
console.log(prepayment_operational); // undefined
return loadProgress();
});
// fun1
function loadMain() {
return $.ajax({
url:'...',
success:function (data) {
prepayment_apply = data.prepayment_apply;
}
})
}
// fun2
function loadBtn() {
return $.ajax({
url:'...',
success:function (data) {
prepayment_operational = data.prepayment_operational;
}
})
}
// fun3
$.ajax({
url:'...',
type:'get',
dataType:'json',
load_animation:true,
success:function (data) {
...
}
})
Apabila saya merangkum $.ajax ke dalam fungsi, prabayaran_operasi yang ditaip menggunakan janji tidak ditentukan.
var prepayment_apply,prepayment_operational;
//
loadMain().then(function () {
$.ajax({
url: '...',
success: function (data) {
prepayment_operational = data.prepayment_operational;
}
})
}
)
.then(function () {
console.log(prepayment_operational); // '111'
return loadProgress();
});
Apabila saya menulis ajax terus, saya boleh mendapatkan nilai yang saya mahukan. Dan apabila saya meletakkan
dalam coretan 1loadMain().then(loadBtn()).then(function () {
console.log(prepayment_operational); // undefined
return loadProgress();
});
ditukar kepada
loadMain().then(function () {return loadBtn()}).then(function () {
console.log(prepayment_operational); // undefined
return loadProgress();
});
Kod segmen 1 juga boleh menghiburkan prabayaran_operasi seperti biasa.
Saya ingin bertanya mengapa ini.
maka
sepatutnya mendapat fungsi, bukan yang lain. . .then
拿到的应该是一个函数,而不是其他的东西。。。loadMain().then(loadBtn)....
jQ sendiri mempunyai Janji (dalam modul tertunda), seperti:
Cara penulisan ini adalah tradisional, dan:
Ini menggunakan mekanisme Janji terbina dalam jQ (
$.ajax
本身会返回Promise,可以挂.done()
或者.fail()
)。也可以用.promise()
Mengembalikan objek janji secara dinamik.Sila rujuk "Objek Tertunda" dalam dokumentasi jQ untuk butiran.