2013-08-18 13 views
9

Başımın vaatlerini almak için bir kod örneği üzerinde çalışıyorum. Ama geri aramalarla nasıl başa çıkacağını ve daha sonra "o zaman" değerini nasıl alacağımı anlayamıyorum.Ember JS sözlerini anlamaya çalışıyorum

Şu an üzerinde çalıştığım iki ilgili JSBin örneği. Kurabiye taklit etmek için ayrıntılı bir tarzda yazılmış.

http://jsbin.com/iSacev/1/edit

temel davranışı göstermek için tamamen senkron bir örnek zaman uyumsuz uyumsuz olan

ember.js (kasıtlı olarak temel nesne modelini kullanarak) ve

söz olmadan

ember.js http://jsbin.com/udeXoSE/1/edit

İlk örneği genişletme ve bir gecikme ile işlerin yapıldığı yöntemi uygulama ve daha sonra zamanında yerine getirilmiş bir söz nesnesi döndürme girişimi. anlamaya çalışan

Kavramlar: Düzgün sözlerini işleyebilir ve özellikle Ember.RSVP.Promise ve daha sonra bir nesneyi almak nasıl

  • .
  • nasıl düzgün bir nesne özellikle sözler ve Ember.RSVP.Promise işlemek ve nasıl alınır

cevap

14

sonra

senin gibi görünüyor yerine setTimeout ait Ember.run.later yöntemi kullanmak

İlk yerine yo üzerine söz iterek: Bu anladım sahip yakınında, çalışma şeyler almak için jsbin için bazı küçük değişiklikler yapmak zorunda olan ur dizisi, vaatin then geri çağrıya geçirdiği değeri zorlamanız gerekir. Bu durumda gerçekten bu söz nesnesine ihtiyacınız yok. Bu nedenle: cookieSlowBake öğesindeki bir hatayı düzeltmek için ikinci değişiklik yapıldı. Orijinal versiyonda, söz, Ember.run.later geri aramada olmadığı için her zaman yanlış olarak değerlendirecek bir koşullu test nedeniyle reddediliyordu. Yeni sürüm şartlı koşullardan kurtulur ve geri çağırma yapıldığında sözünü çözer.

var bakedCookiePromise = new Ember.RSVP.Promise(function(resolve, reject){ 
    var bakeTime = 2000; // milliseconds 
    var bakedCookie = false; 
    Ember.run.later(cookieDough, function() { 
    // code here will execute within a RunLoop in about the bakeTime with this == cookieDough 
    cookieDough.set('deliveryStatus', "cookie delivered later after baking " + bakeTime); 
    bakedCookie = true; 
    resolve(cookieDough); 
    }, bakeTime); 
}); 

burada jsbin çalışma bakınız:

http://jsbin.com/ebOBEk/1/edit yerine setTimeout

ait Ember.run.later yöntemini nasıl kullanılır Bunlar temelde aynı şeydir. Doğru şekilde kullanıyor görünüyorsun.

+0

Mike çok teşekkürler. Örneğin mantıklı. Yani "değer" yerine getirilmiş vaattir ve ben sadece onu ele almak zorundayım. Ancak bana kafa karıştırıcı olan şey, bir başka işlevin nasıl kullanılacağıdır. Örneğin. neden bu iki örnek http: // jsbin'de çalışmıyor?com/omIZeq/1/"this" kullanarak http://jsbin.com/omIZeq/2/edit düzenleyin "değer" –

+0

kullanarak bu yardımcı oldum. Bu yüzden bir fx ile otuzluyu ele almak, sadece bir argümanı olarak bunu geçsin. İlk jsbin ile ilgili problem, fx'i arg olarak geçmek yerine, fx'i yürütmek ve sonucunu arg olarak iletmektir. Yani cookiePromise.then (App.cookieDeliveredSuccessfully (bu), App.cookieNotDelivered (this)) yerine 'cookiePromise.then (App.cookieDeliveredSuccessfully, App.cookieNotDelivered) olmalıdır;' –

+0

Ahhhh tamam. Bu yüzden, o zamanki işlevin içsel uygulamasının sahnelerin ardındaki argümanı geçtiğini farz ediyorum. Sanırım kaşlı ayraçlar arasında bir şey görmedim, orada değildi. Şimdi birden fazla vaatler zincirleme denemek için. Teşekkürler! –

İlgili konular