Ne zaman bir WordPress kullanmak's "ardından" yöntemi ertelenmiş kullanmalıyım ve ne zaman "boru" yöntemi kullanmalıyım?
Deferred
jQuery fonksiyonları asenkron zincirleme uygulamak için kullanılan iki işlevi vardır:
then()
deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred
doneCallbacksFonksiyonları dizisi, Ertelenmiş çözüldüğünde aradı.
failCallbacksFonksiyonları dizisi, Ertelenmiş reddetti aradı.
pipe()
deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise
doneFilterErtelenmiş olan isteğe bağlı bir işlev çözümlenir.
failFilterErtelenmiş olan isteğe bağlı bir işlev reddedilir.
then()
ikincisi fazladan parası eklemek gerekir bu yüzden biraz pipe()
daha uzun civarında olmuştur biliyorum, ama fark tam olarak ne olduğunu bulamıyorum. Hem adı ve Deferred
dönen arasındaki fark, onlar farklı olsa da hemen hemen aynı geri arama ve parametreleri, ve Promise
dönen çok az görünüyor.
Okudum resmi dokümanlar defalarca ama her zaman onları bulmak çok "yoğun" gerçekten wrap başımı ve arama bulunan birçok tartışma olan bir özellik veya diğer ama bulamadım henüz bir şey gerçekten açıklar farklı artılarını ve eksilerini her biri.
then
kullanmak için daha çok zaman pipe
kullanmak daha mı iyi?
Ayrıca
Felix's excellent answer gerçekten bu iki işlevi farklı nasıl açıklamak yardımcı oldu. Ama eğer then()
işlevsellik pipe()
bu tercih zamanları varsa merak ediyorum.
pipe()
then()
daha güçlüdür ve eski ikinci şeyi yapabilir gibi görünüyor. then()
kullanmak için bir neden adını işlevleri aynı veri işleme zinciri fesih olarak rolünü yansıtan olabilir.
Ama 23**'pipe()
ile nedeniyle yapılamayacak Deferred
orijinal s *dönen 26* yeni dönen? gerektiren bir harf kullan
CEVAP
BerijQuery 1.8.then
.pipe
aynı şekilde davranır:
Admin Dikkat:JQuery 1.8,
deferred.pipe()
yöntemi önerilmiyor. Bunun yerinedeferred.then()
yöntemi, yerine kullanılmalıdır.
ve
JQuery 1.8 gibi,
deferred.then()
yöntemi döndürür bir işlev üzerinden ertelenen bir durum ve değerler, şimdi kullanım dışıdeferred.pipe()
yöntem yerine filtre yeni bir söz.
Aşağıdaki örnekler, hala bazıları için yararlı olabilir.
Bunlar farklı amaçlara hizmet eder:
.then()
işlem sonucu ile çalışmak istediğiniz zaman kullanılır, Yani belgelere dediği gibi, ertelenmiş nesne çözülmüş ya da reddetti..done()
.fail()
kullanarak aynı.(Ön)
.pipe()
kullanmak istiyorumfiltresonuç bir şekilde..pipe()
bir geri dönüş değeridone
fail
geri aramalar için argüman olarak kabul edilecektir. Ayrıca başka bir ertelenmiş nesne döndürebilir ve aşağıdaki geri bu ertelenmiş kayıtlı olacak..then()
(ya da.done()
,.fail()
), kayıtlı aramalar değerleri sadece göz ardı edilir dönüşü ile durum böyle değil.
Kullandığınız değildirya.then()
ya.pipe()
. Sanaolabilir.then()
aynı amaçlar için .pipe()
ama bunun tersi geçerli değil.
Örnek 1
Bazı operasyon sonucu nesneleri dizisi
[{value: 2}, {value: 4}, {value: 6}]
ve değerleri minimum ve maksimum değerlerini hesaplamak. done
aramaları kullanıyoruz varsayalım:
deferred.then(function(result) {
// result = [{value: 2}, {value: 4}, {value: 6}]
var values = [];
for(var i = 0, len = result.length; i < len; i ) {
values.push(result[i].value);
}
var min = Math.min.apply(Math, values);
/* do something with "min" */
}).then(function(result) {
// result = [{value: 2}, {value: 4}, {value: 6}]
var values = [];
for(var i = 0, len = result.length; i < len; i ) {
values.push(result[i].value);
}
var max = Math.max.apply(Math, values);
/* do something with "max" */
});
Her iki durumda da liste üzerinde yineleme ve her nesnenin değeri ayıklamak gerekiyor.
Hem geri aramaları tek tek bunu yapmak zorunda değilsiniz, böylece bir şekilde değerleri önceden ayıklamak için daha iyi olmaz mı? Evet! Ve bunun için .pipe()
kullanabiliriz.
deferred.pipe(function(result) {
// result = [{value: 2}, {value: 4}, {value: 6}]
var values = [];
for(var i = 0, len = result.length; i < len; i ) {
values.push(result[i].value);
}
return values; // [2, 4, 6]
}).then(function(result) {
// result = [2, 4, 6]
var min = Math.min.apply(Math, result);
/* do something with "min" */
}).then(function(result) {
// result = [2, 4, 6]
var max = Math.max.apply(Math, result);
/* do something with "max" */
});
Belli ki bu uydurma bir örnektir ve çok farklı (belki daha iyi) bu sorunu çözmek için yolları vardır, ama bu noktayı gösterir umarım.
Örnek 2
Ajax çağrıları göz önünde bulundurun. Bazen bir önceki tamamlandıktan sonra bir Ajax arama başlatmak istiyorum. Bir şekilde done
bir geri arama içinde ikinci bir arama yapmak için:
$.ajax(...).done(function() {
// executed after first Ajax
$.ajax(...).done(function() {
// executed after second call
});
});
Şimdi, kod ayrıştır ve bir işlev içinde bu iki Ajax çağrıları koymak istiyorum varsayalım:
function makeCalls() {
// here we return the return value of `$.ajax().done()`, which
// is the same deferred object as returned by `$.ajax()` alone
return $.ajax(...).done(function() {
// executed after first call
$.ajax(...).done(function() {
// executed after second call
});
});
}
Ertelenmiş nesne makeCalls
için geri takmak için çağıran başka bir kod izin vermek için kullanmak istiyorumikinciAjax çağrı, ama
makeCalls().done(function() {
// this is executed after the first Ajax call
});
ikinci arama done
bir geri arama içinde yapılır istenilen tepki ve erişilebilir dışarıdan değil.
Çözüm .pipe()
yerine kullanmak olacaktır:
function makeCalls() {
// here we return the return value of `$.ajax().pipe()`, which is
// a new deferred/promise object and connected to the one returned
// by the callback passed to `pipe`
return $.ajax(...).pipe(function() {
// executed after first call
return $.ajax(...).done(function() {
// executed after second call
});
});
}
makeCalls().done(function() {
// this is executed after the second Ajax call
});
.pipe()
kullanarak mümkün olan "Ajax çağrıları/sipariş. gerçek akış göstermeden çağrısı" iç için geri ekleme yapabilirsiniz
Genel olarak, ertelenmiş nesneleri kodunuz :) ayrıştır için ilginç bir yol sağlar
Ne zaman "strictfp" java ana...
Ne zaman "bu" bir sınıfta ku...
Bir WordPress kullanmak için bir&; var...
C# ta string kullanmalıyım.Boş ya da D...
'olmayan mutasyona " için en ...