javascript - Sila beritahu saya tentang masalah menukar fungsi panggil balik jq untuk menjanjikan pelaksanaan
漂亮男人
漂亮男人 2017-05-19 10:41:59
0
2
717

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.

Coretan kod 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();
            });

Apabila saya menulis ajax terus, saya boleh mendapatkan nilai yang saya mahukan. Dan apabila saya meletakkan

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

漂亮男人
漂亮男人

membalas semua(2)
phpcn_u1582

maka sepatutnya mendapat fungsi, bukan yang lain. . . then拿到的应该是一个函数,而不是其他的东西。。。

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

loadMain().then(loadBtn)....🎜
给我你的怀抱

jQ sendiri mempunyai Janji (dalam modul tertunda), seperti:

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

Cara penulisan ini adalah tradisional, dan:

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

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.

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