javascript - Promise merangkum ajax dan mahu melaksanakan ajax secara berurutan, tetapi didapati ia tidak dilaksanakan mengikut urutan
ringa_lee
ringa_lee 2017-05-31 10:38:42
0
8
875

Kod adalah seperti berikut:

    function $myAjax(url, method, data, callback) {
        let p = new Promise(function(resolve, reject) {
            $Ajax.request({
                url: url,
                method: method,
                data: data,
                success: function(resp) {
                    callback(resp);
                    resolve();
                },
                failure: function(xhr) {
                    //todo
                    reject();
                }
            });
        });
        return p;
    }
    let $docs = document;
    $docs.getElementById('xxx').onclick = function() {
        $myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid', 'get', { 'memberid': 1920740, 'activeid': 1 }, function(resp) {
            console.log(resp);
            console.log(1);
        }).then($myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid', 'get', { 'memberid': 1920740, 'activeid': 1 }, function(resp) {
            console.log(resp);
            console.log(2);
        }));
    };`

Maksudnya, kadangkala 2 akan dicetak dahulu, dan kemudian 1 akan dicetak;

Tempahan yang ingin anda laksanakan ialah: 1, 2

Sila beri nasihat!

ringa_lee
ringa_lee

ringa_lee

membalas semua(8)
左手右手慢动作

Um, anda salah tulis ini Cara yang betul untuk menulisnya adalah seperti berikut

.
$docs.getElementById('xxx').onclick = function() {
    $myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid', 'get', { 'memberid': 1920740, 'activeid': 1 }, function(resp) {
        console.log(resp);
        console.log(1);
    }).then(function() {
        $myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid', 'get', { 'memberid': 1920740, 'activeid': 1 }, function(resp) {
            console.log(resp);
            console.log(2);
        })
    });
};`
滿天的星座
$docs.getElementById('xxx').onclick = async function() {
let resp1 = await $myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid')
let resp2 = await $myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid')
}
滿天的星座

Cara anda menulisnya bermakna fungsi tolak tidak dipanggil Selepas ia berjaya dicetuskan, apakah output resp anda?

伊谢尔伦

Anda perlu menggunakan tatasusunan untuk memastikan baris gilir, dan gunakan pengurangan untuk memastikan operasi superposisi nilai pulangan.
Kemudian laksanakan janji itu sendiri

洪涛

Adalah disyorkan untuk menggunakan penyelesaian muktamad async.

巴扎黑

Pertama sekali, anda perlu faham serba sedikit, Promise不需要传callback,Promise就是为了不传callback回调的。
先看下Promisetatabahasa.

var promise=new Promise(function(resolve,reject){
    //这里面执行异步操作,
    //参数说明:resolve,reject都是function,异步成功了,执行resolve,失败了执行reject
    //此处使用setTimeout模拟一个ajax
    setTimeout(function () {
        resolve(testData);
    }, 1000);
})
promise.then(function success(){
//执行resolve就等于初始执行这个函数
},function error(){
//执行reject就等于初始执行这个函数
});

//多个then
//promise.then....

Adalah disyorkan untuk membaca tutorial yang ditulis oleh Ruan Yifeng: Janji

洪涛

Semua janji dalam masa itu dijadualkan untuk dilaksanakan serta-merta mengikut tertib, dan mana-mana daripada masa itu tidak boleh menjejaskan atau menangguhkan panggilan lain. Maksudnya, ajax kedua anda tidak akan menunggu sehingga permintaan ajax pertama dilaksanakan. Penyelesaian

//ajax 的promise 封装
var ajax1 = new Promise((resolve,reject) => {
// request
})
var ajax2 = new Promise((resolve,reject) => {
// request
})
//调用

ajax1()
    .then(() => return ajax2())
    ....
世界只因有你

Sila siarkan kod anda dan bukannya tangkapan skrin Ini adalah helah untuk bertanya soalan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!