Tüketici tarafından iptal edilmesi, takeUntil kullanılarak çağrılabilir, ancak bu mutlaka çok dinamik değildir. Bu durumda, denklemin üretici tarafındaki bir Gözlemlenebilir'i iptal etmeye çalışıyorum, aynı şekilde bir söz zincirinde bir Söz Sözü'nü iptal etmek isteyebilirsiniz (ki bu da doğal hizmet ile mümkün değildir).Üretici tarafından Gözlemlenebilir taraftan değil, tüketici tarafında değil
Bu Gözlemlenebilir bir yöntemden döndüğümü varsayalım. (Bu Kuyruk kütüphanesi, bir metin dosyasına okuyan/yazan basit bir kalıcı kuyruktur, okuma/yazma işlemlerini kilitlememiz gerekir, böylece hiçbir şey bozulmaz). , Gözlemlenebilir sadece hayır sonucu (ler) ile boş bir gözlemlenebilir geri göndermek Ben kilidi elde edemiyorsanız
, nasıl "iptal" olabilir -
Queue.prototype.readUnique = function() { var ret = null; var lockAcquired = false; return this.obsEnqueue .flatMap(() => acquireLock(this)) .flatMap(() => { lockAcquired = true; return removeOneLine(this) }) .flatMap(val => { ret = val; // this is not very good return releaseLock(this); }) .map(() => { return JSON.parse(ret); }) .catch(e => { if (lockAcquired) { return releaseLock(this); } else { return genericObservable(); } }); };
Ben 2 farklı sorular? Geçerli dönüşün iptal edilip edilmediğine karar vermek için her dönüş çağrısında/else mantığı varsa gerçekten yapmak zorunda mıyım ve eğer öyle ise boş bir Gözlemlenebilir mi? Boş olarak, herhangi bir olasılık olmadan ve onNext için herhangi bir değer içermeyen, ondan beri/onComplete üzerindeki basit yangınların Gözlemlenebilir olduğunu kastediyorum. Teknik olarak, bu boş bir Gözlemlenebilir sanmıyorum, bu yüzden var ise, gerçekten denen şeyin ne olduğunu arıyorum.
kod bu özel dizisi bakarsak: ne yapıyorum yöntemin üstündeki ret bir başvuru depolamak ve daha sonra bir adım daha sonra yeniden başvuran
.flatMap(() => acquireLock(this)) .flatMap(() => { lockAcquired = true; return removeOneLine(this) }) .flatMap(val => { ret = val; return releaseLock(this); }) .map(() => { return JSON.parse(ret); })
. Aradığım şey, zincirin dışındaki bazı durumları ayarlamak zorunda kalmadan removeOneLine() 'tan JSON.parse()' a atılan değeri iletmenin bir yoludur (ki bu basitçe ineleganttır).
teşekkürler @olsn, Bölüm 2'yi takip ediyorum (harita ve mapTo arasındaki farkı bilmeme rağmen), fakat bölüm 1 ile ilgili olarak, takip etmiyorum, başka bir deyişle açıklamayı aklınızdan çıkarır mısınız? –
part1, mapTo' 'mapTo' to_ _map doğrudan bir argüman alır sadece budur' (üzgün, cevap kötü structued biraz olabilir) temelde map' 'arasındaki fark kod bloğunun son 4 satır ve 'map' bir fonksiyon alırken,' .mapTo (val) 'de' .map (() => val) ' – olsn
olarak yazılabilir. Tamam, anladığım şekilde düzenleyeceğim, lütfen çekinmeyin düzenlemelerimi düzenle :) –