Extrait de code 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) {
...
}
})
Lorsque j'encapsule $.ajax dans une fonction, le prepayment_operational tapé à l'aide de la promesse n'est pas défini.
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();
});
Lorsque j'écris directement en ajax, je peux obtenir la valeur que je souhaite. Et quand je mets le
dans l'extrait 1loadMain().then(loadBtn()).then(function () {
console.log(prepayment_operational); // undefined
return loadProgress();
});
changé en
loadMain().then(function () {return loadBtn()}).then(function () {
console.log(prepayment_operational); // undefined
return loadProgress();
});
Le segment de code 1 peut également consoler prepayment_operational normalement.
Je voudrais demander pourquoi.
then
devrait obtenir une fonction, pas autre chose. . .then
拿到的应该是一个函数,而不是其他的东西。。。loadMain().then(loadBtn)....
loadMain().then(loadBtn)....
🎜jQ lui-même a une promesse (dans le module différé), telle que :
Cette façon d'écrire est traditionnelle, et :
Cela utilise le mécanisme de promesse intégré de jQ (
$.ajax
本身会返回Promise,可以挂.done()
或者.fail()
)。也可以用.promise()
Renvoie dynamiquement l'objet de promesse.Veuillez vous référer à « Objet retardé » dans la documentation jQ pour plus de détails.