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
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 durumdaaddEventListener
yerineonX
kullanmalısınız.
Nasıl NSString için bilimsel deneyler ...
Nasıl bir Etkinlik için başlık çubuğun...
Geri eski durumuna repo getirmek için ...
Nasıl bir setTimeout için bir parametr...
Dosyalar ve klasörler de dahil olmak ü...