मैंने Scala.js में वादा और वायदा का उपयोग करने की कोशिश की। वादा करता है, जैसे ही फ्यूचर्स की बात आती है मुझे चेतावनियां और त्रुटियां मिलती हैं।Scala.js में वायदा
प्रयास करें:
val p1 = Promise[Int]
val f1: Future[Int] = p1.future
val p2 = Promise[Int]
val f2: Future[Int] = p2.future
val res1 = for {
v1 <- f1
v2 <- f2
} yield v1 + v2
val res2 = f1.flatMap(x => f2.map(y => x + y))
res1 onSuccess {
case x: Int => g.console.log(x);
}
res2 onSuccess {
case x: Int => g.console.log(x);
}
// callback in dom, using ScalaTags
// div(`class` := "btn btn-default", `type` := "button", onclick := click(1, p1))
def click(i: Int, p: Promise[Int])(x: dom.MouseEvent): Unit = {
g.console.log(i);
try {
p success i
}
catch {
case x: Throwable => println("again")
}
}
f1 onSuccess {
case x: Int => 1
}
और मैं एसबीटी fastOptJs में मिलता है:
[warn] Referring to non-existent class jl_Thread$UncaughtExceptionHandler
[warn] called from s_concurrent_impl_ExecutionContextImpl.init___ju_concurrent_Executor__F1
[warn] called from s_concurrent_impl_ExecutionContextImpl$.fromExecutor__ju_concurrent_Executor__F1__s_concurrent_impl_ExecutionContextImpl
[warn] called from s_concurrent_ExecutionContext$Implicits$.global$lzycompute__p1__s_concurrent_ExecutionContextExecutor
[warn] called from s_concurrent_ExecutionContext$Implicits$.global__s_concurrent_ExecutionContextExecutor
[warn] called from Lexample_H2$class.Lexample_H2$class__$init$__Lexample_H2__V
[warn]
और मैं ब्राउज़र में मिलती है:
uncaught exception: java.lang.RuntimeException: System.getProperty() not implemented
क्या याद आ रही है/लागू नहीं किया गया? मैं इसे कैसे कार्यान्वित कर सकता हूं? क्या आसपास कोई काम है? मैं निष्पादन कॉन्टेक्स्ट को कैसे कार्यान्वित कर सकता हूं जो ब्राउज़र के साथ ईवेंट को संभालने के लिए समझ में आता है?
एक छोटी अनुसंधान के बाद, 'queue' का उपयोग कर कार्यान्वित किया जाता है या तो [वादे] (https://www.promisejs.org/) या [समय समाप्ति] (का उपयोग कर http://www.w3schools.com/ jsref/met_win_settimeout.asp) पुराने ब्राउज़र के लिए वादे का समर्थन नहीं करते हैं। – Suma
नोट: 'कतार' इस अर्थ में अतुल्यकालिक है कि बाद में कोड निष्पादित किया जाता है (फिर एक हल किए गए वादे या सेटटाइमआउट पर उपयोग करके), लेकिन कोड समानांतर में नहीं चलता है। असली "समांतर" (समवर्ती) कार्यों के लिए आपको वेब श्रमिकों की आवश्यकता है, उदाहरण के लिए github.com/nolanlawson/promise-worker से लाइब्रेरी का उपयोग करना। या मैं यहाँ गलत हूँ? – Suma
@ सुमा आप सही हैं। जावास्क्रिप्ट में साझा-स्मृति समांतरता जैसी कोई चीज़ नहीं है, इसलिए 'वादा और' भविष्य का समानांतर में निष्पादित नहीं होता है। यदि समांतरता की आवश्यकता है, तो आपको वेब श्रमिकों का उपयोग करने की आवश्यकता है, लेकिन आप साझा स्मृति खो देते हैं, जो मूल रूप से बदलता है कि चीजें अपने अधिकार में कैसे काम करती हैं। – sjrd