2016-04-01 19 views
0

Başarısız bir gelecek oluşturmak için Future.failed yapıcısını kullanıyorum, ancak başarısız bir gelecek hala olmaması gerektiğinde istisna atar.Scala Future.failed, kendisine gönderilen istisnayı atar

session.loadAll yöntemi bir istisna atar.

Ben de Hatta enter image description here

+0

Ne sorduğunuzu kesinlikle bilmiyorum. 'LoadAll' yöntemi bir istisna atar, tamam, desen eşleştirmeniz onu yakalar, tamam, sonra başka bir 'Future.failed 'yeni bir' Exception '(Tamam) kaydırma tamam. Sorun ne? Ayrıca, ekran görüntüleri ile ne var? – slouc

+0

@slouc Amacım söylediğiniz gibi bir istisna sarma geleceğe dönmektir, sorun geleceği geri döndürmek yerine istisna atılır. Görüntüler ile göstermeye çalıştığım şey bu. Hiçbir istisna atılmadığından uygulama çökmemelidir (ya da en azından istisnai bir geleceği sarmakla istediğim bu) – vicaba

+1

Oh, anladım. Ancak 'Future.failed (yeni İstisna()) 'kısmı kesinlikle istisnayı fırlatan değil. Başka bir şey var. Belki de 'getThings' sonucunu tüketen kısım başarısız bir gelecek beklemiyor (bu durumda derleyicinin neden bu durumda 44. satırdaki istisnayı gösterdiğinden emin değilim). Ekran görüntüsü yorumum, resim değil, her zaman kod snippet'leri göndermeniz gerektiğini söylüyordu. – slouc

cevap

2

Ben Future.failed durum atma olmadığını düşünüyorum. Görünüşe göre, yığın izlemesi özel durumun oluştuğu yerde oluşturulur.

Yani, Await.result gibi bir yöntem, ya da gelecek başarılı olduğunu varsayar başka bir yöntemi kullanırsanız atılan yeniden, sen istisna göreceksiniz, ancak atılmış sanki yığın izleme o bakmak yapacak Future.failed.

+0

'Await.result' genellikle engellenen bir çağrı olduğu için önerilmez. Engelleme gerekli değilse, "Future.onComplete" veya "Future.onFailure", eşzamansız kalıbı takip edecek ve daha iyi performans gösterecektir. http://docs.scala-lang.org/overviews/core/futures.html bunun neden bu kötü bir fikir olduğunu açıklıyor – pgoggijr

+0

@pgoggijr Evet, bu iyi bir nokta. – Owen

1

İlk bir try-catch bloğu kullanarak olur

Future.failed throws an exception image

, sana kullandığınız Tam olarak emin değilim Çal Framework kullanıyorum Gelecek, çünkü bunlar asenkron çağrılara benzemiyor.

Sorunuzu yanıtlamak için, burada neler olup bittiğinden emin değilim, ancak istisnayı ele almanız gerekiyor gibi görünüyor. Geleceğin tüketicisi Future.onComplete ve desen eşleşmesi bir Hata türünü veya Future.onFailure'u ve Throwable türlerinde desen eşlemesini kullanmalıdır. Geleceği

Scala docs: http://docs.scala-lang.org/overviews/core/futures.html

+0

Sorun şu ki tüketici ile sorun değil, istisnai durumla ilgilenmiyordu – vicaba