final class JsPromiseBinding[A] extends Binding[Option[Either[Any, A]]]
A wrapper that wraps a scala.scalajs.js.Thenable to a com.thoughtworks.binding.Binding.
Author:
杨博 (Yang Bo) <[email protected]>
- Source
- JsPromiseBinding.scala
This JsPromiseBinding will cache the result of the
thenable
. Given a scala.scalajs.js.Thenable that will be delay executed.import scala.scalajs.js var upstreamEvaluationCount1 = 0 val delayedThenable = js.Promise.resolve[Unit](()).`then`[Double] { case () => upstreamEvaluationCount1 += 1 math.random }
The execution will not be performed right now.
val jsPromiseBinding = JsPromiseBinding(delayedThenable) upstreamEvaluationCount1 should be(0)
When there are multiple usages of
jsPromiseBinding
, each usage should be triggered with the same value.var evaluationCount1 = 0 var evaluationCount2 = 0 var evaluationCount3 = 0 val usage1 = Binding { jsPromiseBinding.bind match { case Some(Right(value)) => evaluationCount1 += 1 case _ => } } val usage2 = Binding { jsPromiseBinding.bind match { case Some(Right(value)) => evaluationCount2 += 1 val usage3 = Binding { jsPromiseBinding.bind match { case Some(Right(value)) => evaluationCount3 += 1 case _ => } } val _ = usage1.bind usage3.bind case _ => } } usage2.watch() upstreamEvaluationCount1 should be(0) evaluationCount1 should be(0) evaluationCount2 should be(0) evaluationCount3 should be(0)
And each usage should be triggered once and only once.
delayedThenable.toFuture.map { _ => upstreamEvaluationCount1 should be(1) evaluationCount1 should be(1) evaluationCount2 should be(1) evaluationCount3 should be(1) }
- Alphabetic
- By Inheritance
- JsPromiseBinding
- Binding
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
def
+(other: String): String
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to any2stringadd[JsPromiseBinding[A]] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
-
def
->[B](y: B): (JsPromiseBinding[A], B)
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to ArrowAssoc[JsPromiseBinding[A]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
addChangedListener(listener: ChangedListener[Option[Either[Any, A]]]): Unit
- Attributes
- protected
- Definition Classes
- JsPromiseBinding → Binding
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
final macro
def
bind: Option[Either[Any, A]]
Returns the current value of this Binding and marks the current
@dom
method depend on this Binding.Returns the current value of this Binding and marks the current
@dom
method depend on this Binding.Each time the value changes, in the current
@dom
method, all code after the currentbind
expression will be re-evaluated if the current@dom
method is watching. However, code in current@dom
method and before the currentbind
expression will not be re-evaluated. The above rule is not applied to DOM nodes created by XHTML literal. Abind
expression under a DOM node does not affect siblings and parents of that node.- Definition Classes
- Binding
- Note
This method must be invoked inside a
@dom
method body or aBinding { ... }
block..
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
def
ensuring(cond: (JsPromiseBinding[A]) ⇒ Boolean, msg: ⇒ Any): JsPromiseBinding[A]
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to Ensuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: (JsPromiseBinding[A]) ⇒ Boolean): JsPromiseBinding[A]
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to Ensuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean, msg: ⇒ Any): JsPromiseBinding[A]
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to Ensuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean): JsPromiseBinding[A]
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to Ensuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to StringFormat[JsPromiseBinding[A]] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
removeChangedListener(listener: ChangedListener[Option[Either[Any, A]]]): Unit
- Attributes
- protected
- Definition Classes
- JsPromiseBinding → Binding
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
unwatch(): Unit
Disable automatic recalculation.
-
def
value: Option[Either[Any, A]]
Returns the current value of this Binding
Returns the current value of this Binding
- Attributes
- protected
- Definition Classes
- JsPromiseBinding → Binding
- Note
This method must not be invoked inside a
@dom
method body or aBinding { ... }
block..
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
watch(): Unit
Enable automatic recalculation.
Enable automatic recalculation.
You may invoke this method more than once. Then, when you want to disable automatic recalculation, you must invoke unwatch same times as the number of calls to this method.
-
def
→[B](y: B): (JsPromiseBinding[A], B)
- Implicit
- This member is added by an implicit conversion from JsPromiseBinding[A] to ArrowAssoc[JsPromiseBinding[A]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc