. Her iki koşul da, functionA
numaralı telefonu arayabilir. Başka bir durumdan kaçınmanın bir yolu var mı? fs.writeFileSync
yapabilirim ancak engelleme olmayan bir çözüm arıyorum.Bu benim kısa bir kod versiyonu if-else vaadi (bluebird) akış
cevap
Ben size functionA
isterseniz her zaman, koşullu fonksiyonu
var condition = ...;
var maybeWrite = function(condition, file, jsonData){
return (condition) ? fs.writeFileAsync(file, jsonData) : Promise.resolve(true);
}
Promise.all([maybeWrite(condition, file, jsonData),functionA()])
.then(function(){
// here 'functionA' was called, 'writeFileAsync' was maybe called
})
ile Promise.all()
kullanmak Veya olabilir
var waitFor;
if (conditionA)
waitFor = fs.writeFileAsync(file, jsonData);
else
waitFor = Promise.resolve(undefined); // wait for nothing,
// create fulfilled promise
waitFor.then(function() {
return functionA();
});
kısaltmasıdır
(conditionA
? fs.writeFileAsync(file, jsonData)
: Promise.resolve())
.then(functionA);
aradığınız düşünüyorum sadece dosyadan sonra çağrılabilir belki de yazılabilir:
maybeWrite(condition, file, jsonData)
.then(function(){
// here file may have been written, you can call 'functionA'
return functionA();
})
Bu yaklaşımla My * only * issue sürekliliğidir. Çizgiyi aşmak zorunda kaldığın için kendini imzala. Promise zincirlerinin faydalarından biri olan - mantığınız doğrusal bir duygudur. –
Diğer öneriler burada çalışırken, kişisel olarak aşağıdakileri tercih ediyorum.
Promise.resolve(function(){
if (condition) return fs.writeFileAsync(file, jsonData);
}())
.then()
Her zaman bu ek sözünü (ziyade minör IMO) yaratma dezavantajına sahiptir ama benim göz daha temiz görünüyor. Ayrıca IIFE'nin içinde kolayca başka koşullar/mantık da ekleyebilirsiniz.
DÜZENLEME
uzun süre bu gibi şeyler uyguladıktan sonra artık kesinlikle biraz daha net bir şey değişti. o çok nettir böylece ilk söz basitçe yapmak bakılmaksızın oluşturulur:
/* Example setup */
var someCondition = (Math.random()*2)|0;
var value = "Not from a promise";
var somePromise = new Promise((resolve) => setTimeout(() => resolve('Promise value'), 3000));
/* Example */
Promise.resolve()
.then(() => {
if (someCondition) return value;
return somePromise;
})
.then((result) => document.body.innerHTML = result);
Initial state
if (someCondition) return somePromise;
ilk .sonra içinde olacağını() işlevi.
- 1. kısa versiyonu
- 2. Kısa bir [] akış kullanarak oluşturma
- 3. Bu isteğin DİNLENME versiyonu
- 4. Bluebird
- 5. kısa kod beliriyor
- 6. CKEditor 4 kısa kod değiştirmesi
- 7. Akış Bu kod akışı kontrol geçer geri arama
- 8. daha verimli ifelse()
- 9. kısa + kısa! = Kısa?
- 10. WordPress özel kısa kod düzenleyici [BackboneJS & TinyMCE]
- 11. PostScript'ten WordPress kısa kod özniteliklerini nasıl alırsınız?
- 12. Bu kod bir istismar mıdır? Bu kod nedir?
- 13. alternatif, benim kod yakında
- 14. Benim jQuery 'KeyCode' kod
- 15. Bluebird kullanarak döngü
- 16. Gelincik varsayılan vaadi kütüphane yığını ORTALAMA önerilmiyor
- 17. if/C++ yazmadan ifelse() hızlandırmak?
- 18. Hata Benim kod eylem
- 19. Thunderer/shortcode kullanarak bir kısa kod ayrıştırmaya çalışılıyor
- 20. Bluebird Promises and Domains
- 21. Vb temiz ve kısa bir kod nasıl yapılır
- 22. Visual Composer kök kısa kod kabı
- 23. WordPress öğesinin değiştirilmesi [Galeri] Kısa kod
- 24. Wordpress şeridi gönderilerden tek kısa kod
- 25. Bu kod
- 26. tembel versiyonu
- 27. nasıl Bu web kamerası başlar benim kod Pygame
- 28. Bu ne tür bir kod?
- 29. objektif-c, bu kod satırını yazmak için daha kısa bir yol var mı?
- 30. Seti Görüntü kod bu kısmını kullanıyorum 2
Söz, async görev denetimi için tasarlanmıştır. Neden sync fucntion kullanmalı? 'WriteFileAsync''in dönüş değerini kontrol edebilirsiniz. – CodeColorist