cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Keraguan tentang operasi tak segerak Janji, dan cara menulisnya dengan lebih elegan

大家讲道理大家讲道理2707 hari yang lalu876

membalas semua(3)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-07-05 11:06:56

    Janji dilahirkan untuk menyelesaikan kawalan aliran tak segerak Inti penggunaannya ialah kaedah kemudian
    kemudian kelihatan seperti panggilan balik pada pandangan pertama, tetapi cirinya ialah ia boleh mengendalikan pengecualian dan penulisan berantai beberapa Kebergantungan permintaan ajax adalah seperti berikut:

    A1 -> A2
    Aa -> Jika anda menggunakan Promise, kod itu akan menjadi sangat jelas
    Sediakan dahulu A1, A2, Aa, Ab, Ac, Ad, dan Ax Semuanya adalah fungsi yang mengembalikan objek janji berdasarkan kebergantungan. Lepas tu boleh tengok persembahan Janji :

    Promise.all([
        A1().then(A2),      //A1 -> A2
        Promise.all([
            Aa().then(Ab),  //Aa -> Ab
            Ac()            //Ac
        ]).then(Ad)         //Ab + Ac -> Ad;
    ]).then(Ax,Err)         //A2 + Ad -> Ax
    .then(function(v){
    //完成
    })
    A1, Aa dan Ac tidak mempunyai tanggungan dan akan dilaksanakan secara serentak, dan akan diteruskan berdasarkan penyiapan tanggungan
    Tidak kira masalah Ajax yang berlaku, peristiwa Err terakhir akan dicetuskan untuk mengendalikan ralat secara seragam

    Jika anda menggunakan panggilan balik untuk menulisnya Cubalah, sama ada kecekapannya tidak baik, atau sekumpulan kod ditambahkan pada kaedah panggil balik untuk menentukan kebergantungan

    Kod rujukan:

    //首先准备好 A1,A2,Aa,Ab,Ac,Ad,Ax 都是基于回调的异步函数
    var a2,ab,ac,ad;  //用来保存完成情况的变量
    function runAx(){
        if(a2 == undefined || ad == undefined) return; //判断依赖
        Ax(a2,ad,function(e,v){
            //完成
        })
    }
    function runAd(){
        if(ab == undefined || ac == undefined) return; //判断依赖
        Ad(ab,ac,function(e,v){
            ad = v;
            runAx();
        })
    }
    A1(function(e,v){   
        A2(v,function(e,v){
            a2 = v;
            runAx();
        })
    })
    Aa(function(e,v){
        Ab(v,function(e,v){
            ab = v;
            runAd();
        })
    })
    Ac(function(e,v){
        ac = v;
        runAd();
    })

    Kod di atas tidak mengendalikan ralat dan terlalu panjang Jika kebergantungan lebih rumit, anda boleh bayangkan jumlah kod dan mudah untuk membuat kesilapan;

    balas
    0
  • 为情所困

    为情所困2017-07-05 11:06:56

    Pemahaman anda pada asasnya betul, Promise ia tidak begitu mudah, ia hanya mengurangkan tahap bersarang.

    Jadi, penyelesaian muktamad ialah Async/Await, penyoal boleh menyemak maklumat.

    balas
    0
  • 怪我咯

    怪我咯2017-07-05 11:06:56

    Keanggunan adalah satu demi satu, meluruskan bentuk pokok Krismas panggilan semula Ini adalah sumbangan Janji.

    Apabila saya menulis program, saya perlu membuat tujuh atau lapan panggilan balik dan Promises adalah lebih baik.

    Jika anda rasa menulis itu terlalu menyusahkan, maka jangan gunakannya, gunakan Async/Await

    balas
    0
  • Batalbalas