recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - S'il vous plaît, parlez-moi du problème lié à la modification de la fonction de rappel de JQ pour promettre une implémentation

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.

Extrait de code 2

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 1
loadMain().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.

漂亮男人漂亮男人2806 Il y a quelques jours721

répondre à tous(2)je répondrai

  • phpcn_u1582

    phpcn_u15822017-05-19 10:43:59

    then devrait obtenir une fonction, pas autre chose. . . then拿到的应该是一个函数,而不是其他的东西。。。

    loadMain().then(loadBtn)....

    loadMain().then(loadBtn)....🎜

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:43:59

    jQ lui-même a une promesse (dans le module différé), telle que :

    $.ajax({
        url:'...',
        success:function (data) {
            prepayment_operational = data.prepayment_operational;
        }
    });

    Cette façon d'écrire est traditionnelle, et :

    $.ajax({
        url:'...'
    }).done(function (data) {
        prepayment_operational = data.prepayment_operational;
    });

    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.

    répondre
    0
  • Annulerrépondre