Packages

final class JsPromiseBinding[A] extends Binding[Option[Either[Any, A]]]

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. Protected

Instance Constructors

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

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. def +(other: String): String
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toany2stringadd[JsPromiseBinding[A]] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (JsPromiseBinding[A], B)
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toArrowAssoc[JsPromiseBinding[A]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  6. def addChangedListener(listener: ChangedListener[Option[Either[Any, A]]]): Unit
    Attributes
    protected
    Definition Classes
    JsPromiseBinding → Binding
  7. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  8. final macro def bind: Option[Either[Any, A]]
    Definition Classes
    Binding
  9. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
  10. def ensuring(cond: (JsPromiseBinding[A]) => Boolean, msg: => Any): JsPromiseBinding[A]
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toEnsuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  11. def ensuring(cond: (JsPromiseBinding[A]) => Boolean): JsPromiseBinding[A]
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toEnsuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  12. def ensuring(cond: Boolean, msg: => Any): JsPromiseBinding[A]
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toEnsuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  13. def ensuring(cond: Boolean): JsPromiseBinding[A]
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toEnsuring[JsPromiseBinding[A]] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  14. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  15. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  16. def formatted(fmtstr: String): String
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toStringFormat[JsPromiseBinding[A]] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  17. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  18. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  19. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  20. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  21. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  22. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @HotSpotIntrinsicCandidate()
  23. def removeChangedListener(listener: ChangedListener[Option[Either[Any, A]]]): Unit
    Attributes
    protected
    Definition Classes
    JsPromiseBinding → Binding
  24. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  25. def toString(): String
    Definition Classes
    AnyRef → Any
  26. final def unwatch(): Unit
    Definition Classes
    Binding
    Annotations
    @inline()
  27. def value: Option[Either[Any, A]]
    Attributes
    protected
    Definition Classes
    JsPromiseBinding → Binding
  28. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  29. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  30. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  31. final def watch(): Unit
    Definition Classes
    Binding
    Annotations
    @inline()

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable]) @Deprecated @deprecated
    Deprecated

    (Since version ) see corresponding Javadoc for more information.

  2. def [B](y: B): (JsPromiseBinding[A], B)
    Implicit
    This member is added by an implicit conversion from JsPromiseBinding[A] toArrowAssoc[JsPromiseBinding[A]] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @deprecated
    Deprecated

    (Since version 2.13.0) Use -> instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.

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

Inherited from AnyRef

Inherited from Any

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

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

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

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

Ungrouped