SORU
31 Ocak 2015, CUMARTESİ


Nasıl bir önceki söz sonuçlar erişebilirim .() zincir?

Sözleri kodumu yeniden var, ve harika bir uzun inşasöz zinciri düz, .then() birden fazla geri ibaret. Sonunda bazı bileşik değer dönmek istiyorum, ve çoklu erişim gerekiyorAra sonuçlar söz veriyorum. Sıra orta çözünürlük değerleri son arama kapsamı dışındadır ancak, bunlara nasıl erişebilirim?

function getExample() {
    return promiseA(…).then(function(resultA) {
        // some processing
        return promiseB(…);
    }).then(function(resultB) {
        // more processing
        return // how do I gain access to resultA here?
    });
}

CEVAP
31 Ocak 2015, CUMARTESİ


Zinciri kır

Zinciri Ara değerleri erişmek için ihtiyacınız olduğunda, ihtiyacınız olan zincirin dışında bu tek parça halinde bölünmüş olmalıdır. Bir geri arama ekleme ve bir şekilde parametre kullanmaya çalışmak yerine, birden çok kez, sonuç değeri, ihtiyaç duyduğunuz her yerde aynı Sözü için birden fazla geri takın. Unutma, promise just represents (proxies) a future value! Doğan yanında düz bir zincir, diğer, sözünü sonuç değeri oluşturmak için kütüphane tarafından size verilen combinators kullanın bir söz.

Bu işlevleri ve bu nedenle kolay modularisation çok basit denetim akışı, net bir kompozisyon neden olur.

function getExample() {
    var a = promiseA(…);
    var b = a.then(function(resultA) {
        // some processing
        return promiseB(…);
    });
    return Promise.all([a, b]).spread(function(resultA, resultB) {
        // more processing
        return // something using both resultA and resultB
    });
}

Bluebird da daha basit (ve daha verimli) inşa ile:Promise.all spread o şifreyi değiştirmek için join function ayrılmış bulunuyor

…
return Promise.join(a, b, function(resultA, resultB) { … });

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Engadget

    Engadget

    18 EYLÜL 2006
  • engineerguy

    engineerguy

    10 Ocak 2010
  • KoreanFrogMania님의 채널

    KoreanFrogMa

    18 Aralık 2011