Class/Object

com.thoughtworks.binding

JsPromiseBinding

Related Docs: object JsPromiseBinding | package binding

Permalink

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
Example:
  1. 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)
    }
Linear Supertypes
Binding[Option[Either[Any, A]]], AnyRef, Any
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. JsPromiseBinding
  2. Binding
  3. AnyRef
  4. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new JsPromiseBinding(promise: Promise[A])

    Permalink
  2. new JsPromiseBinding(thenable: Thenable[A])

    Permalink

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. def +(other: String): String

    Permalink
    Implicit information
    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
  4. def ->[B](y: B): (JsPromiseBinding[A], B)

    Permalink
    Implicit information
    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()
  5. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  6. def addChangedListener(listener: ChangedListener[Option[Either[Any, A]]]): Unit

    Permalink
    Attributes
    protected
    Definition Classes
    JsPromiseBindingBinding
  7. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  8. final macro def bind: Option[Either[Any, A]]

    Permalink

    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 current bind expression will be re-evaluated if the current @dom method is watching. However, code in current @dom method and before the current bind expression will not be re-evaluated. The above rule is not applied to DOM nodes created by XHTML literal. A bind 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 a Binding { ... } block..

  9. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  10. def ensuring(cond: (JsPromiseBinding[A]) ⇒ Boolean, msg: ⇒ Any): JsPromiseBinding[A]

    Permalink
    Implicit information
    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
  11. def ensuring(cond: (JsPromiseBinding[A]) ⇒ Boolean): JsPromiseBinding[A]

    Permalink
    Implicit information
    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
  12. def ensuring(cond: Boolean, msg: ⇒ Any): JsPromiseBinding[A]

    Permalink
    Implicit information
    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
  13. def ensuring(cond: Boolean): JsPromiseBinding[A]

    Permalink
    Implicit information
    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
  14. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  15. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  16. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  17. def formatted(fmtstr: String): String

    Permalink
    Implicit information
    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()
  18. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  19. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  20. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  21. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  22. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  23. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  24. def removeChangedListener(listener: ChangedListener[Option[Either[Any, A]]]): Unit

    Permalink
    Attributes
    protected
    Definition Classes
    JsPromiseBindingBinding
  25. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  26. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  27. final def unwatch(): Unit

    Permalink

    Disable automatic recalculation.

    Disable automatic recalculation.

    Definition Classes
    Binding
    Annotations
    @inline()
    Note

    This method is recursive, which means that the dependencies of this Binding will be unwatched as well.

  28. def value: Option[Either[Any, A]]

    Permalink

    Returns the current value of this Binding

    Returns the current value of this Binding

    Attributes
    protected
    Definition Classes
    JsPromiseBindingBinding
    Note

    This method must not be invoked inside a @dom method body or a Binding { ... } block..

  29. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  30. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  31. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  32. final def watch(): Unit

    Permalink

    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.

    Definition Classes
    Binding
    Annotations
    @inline()
    Note

    This method is recursive, which means that the dependencies of this Binding will be watched as well.

  33. def [B](y: B): (JsPromiseBinding[A], B)

    Permalink
    Implicit information
    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

Deprecated Value Members

  1. final macro def each: Option[Either[Any, A]]

    Permalink
    Definition Classes
    Binding
    Annotations
    @deprecated
    Deprecated

    (Since version 7.0.0) Use bind instead

Inherited from Binding[Option[Either[Any, A]]]

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd from JsPromiseBinding[A] to any2stringadd[JsPromiseBinding[A]]

Inherited by implicit conversion StringFormat from JsPromiseBinding[A] to StringFormat[JsPromiseBinding[A]]

Inherited by implicit conversion Ensuring from JsPromiseBinding[A] to Ensuring[JsPromiseBinding[A]]

Inherited by implicit conversion ArrowAssoc from JsPromiseBinding[A] to ArrowAssoc[JsPromiseBinding[A]]

Ungrouped