Nasıl sözler için varolan bir geri bir API dönüştürebilirim? | Netgez.com
SORU
19 Mart 2014, ÇARŞAMBA


Nasıl sözler için varolan bir geri bir API dönüştürebilirim?

Sözleri ile çalışmak istiyorum ama nasıl bir biçimde geri bir API var:

1. DOM yük ya da başka bir olay:

window.onload; // set to callback
...
window.onload = function(){

};

2. Düz geri arama:

function request(onChangeHandler){
...
request(function(){
    // change happened
});

3. ("") Nodeback: . düğüm stili geri

function getStuff(dat,callback){
...
getStuff("dataParam",function(err,data){

}

4. Düğüm tarzı geri: bütün bir kütüphane

API;
API.one(function(err,data){
    API.two(function(err,data2){
        API.three(function(err,data3){

        })
    });
});

Nasıl sözler, nasıl yaparım, API""? promisify ile çalışırım

CEVAP
19 Mart 2014, ÇARŞAMBA


Sözler devlet olarak bekleyen başlarlar ve yerleşmek

  • yerine getirmiÅŸtiriÅŸlem baÅŸarıyla tamamlandı yani.
  • reddettihesaplama baÅŸarısız oldu yani.

Döndüren fonksiyonlar sözhiç atmak gerekir, reddi yerine dönmelidir. Söz fonksiyonu geri atıyor hem kullanmaya zorlar } catch {ve21**. İnsanlar promisified API kullanarak atmak için sözler beklemeyin. Ne zaman uyumsuz JS iş eminsen değil - lütfen 49* *ilk.

1. DOM yük ya da başka bir olay:

Bu yüzden, genellikle onlar yerine veya red aşamaya geçmek anlamına gelir verileri kullanılabilir olduğunu göstermek için yerleşmek belirtirken anlamına gelir vaat oluşturma (ve .then ile erişilebilir).

Modern yerel ES6 sözler gibi: Promise kurucu destekleyecek uygulamalar söz

function load(){
    return new Promise(function(resolve,reject){
         window.onload = resolve;
    });
}

Kitaplıkları ile destek ertelenmiş (hadi bu örnek için q kullanın $, ama aynı zamanda bir WordPress kullanmak daha sonra kullanacağız):

function load(){
    var d = $q.defer();
    window.onload = function(){ d.resolve(); };
    return d.promise;
}

Ya da API gibi bir WordPress kullanmak ile, bir olay bir kez oluyor takma:

function done(){
    var d = $.Deferred();
    $("#myObject").once("click",function(){
         d.resolve();
    });
    return d.promise();
}

2. Düz geri arama:

Bu API yaygın madem... geri JS yaygın değildir. Hadi onSuccess onFail yaygın durumda bak:

 function getUserData(userId, onLoad, onFail){ ...

Modern yerel ES6 sözler gibi: Promise kurucu destekleyecek uygulamalar söz

function getUserDataAsync(userId){
    return new Promise(function(resolve,reject){
         getUserData(userId,resolve,reject);
    });
}

Kitaplıkları ile destek ertelenmiş (bu örneğin bir WordPress kullanmak burada kullanalım, ama aynı zamanda kullanılan $q yukarıda yazdık):

function getUserDataAsync(userId){
    var d = $.Deferred();
    getUserData(userId,function(res){ d.resolve(res); } ,function(err){ d.reject(err); });
    return d.promise();
}

jQuery de şöyle: bizi çok yakından new Promise(fn) form öykünen bir ifade yazmak için izin avantajı olan $.Deferred(fn) bir form sunuyor

function getUserDataAsync(userId) {
    return $.Deferred(function(dfrd) {
        getUserData(userId, dfrd.resolve, dfrd.reject);
    }).promise();
}

Not: Burada ertelenmiş resolve reject jQuery bir yöntem olduğu gerçeğini istismar ediyoruz""; ıe. sökülebilir bu bağlıdırlarörnekbir jQuery.() Ertelenmiş. Tüm libs bu özelliği sunuyoruz.

3. ("") Nodeback: . düğüm stili geri

Düğüm tarzı geri (nodebacks) geri aramalar her zaman son argüman alır ve ilk parametre bir hata olduğu belli bir biçime sahip. Hadi ilk promisify bir el ile:

getStuff("dataParam",function(err,data){

İçin:

function getStuffAsync(param){
    return new Promise(function(resolve,reject){
         getStuff(param,function(err,data){
             if(err !== null) return reject(err);
             resolve(data);
         });
    });
}

Deferreds ile aşağıdaki (hadi Q şimdi tercih etmelisiniz yeni sözdizimini destekler, ancak bu örnek için Q kullanın) yapabilirsiniz:

function getStuffAsync(param){
    var d = Q.defer();
    getStuff(param,function(err,data){
         if(err !== null) return d.reject(err); // `throw err` also works here.
             d.resolve(data);
    });
    return d.promise;   
}

Genel olarak, elle şeyler çok fazla promisify değil, en akılda Düğümü ile tasarlanmış kütüphaneler promisifying nodebacks için yerleşik bir yöntem var söz veriyorum. Örneğin

var getStuffAsync = Promise.promisify(getStuff); // Bluebird
var getStuffAsync = Q.denodeify(getStuff); // Q

4. Düğüm tarzı geri: bütün bir kütüphane

Altın kural burada yok, onları tek tek promisify. Ancak, bazı söz ve uygulamalar, Bluebird, örneğin toplu olarak bunu yapmak, API Basit olarak: bir söz nodeback bir API dönüştürme için izin verir

Promise.promisifyAll(API);

Notlar:

  • .then iÅŸleyici zaman tabii ki, iÅŸler promisify gerekmez. .then iÅŸleyici bir söz iade veya söz deÄŸeri ile gidermek reddeder. .then bir iÅŸleyici atmak da iyi bir uygulama olduÄŸunu ve söz reddeder - bu ünlü sözü güvenliÄŸi atmak.
  • onload gerçek bir durumda addEventListener yerine onX kullanmalısınız.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011
  • Trulia

    Trulia

    29 Kasım 2006