web/scalajs

javascript callback 을 scala Future 로 facade 작성

wefree 2023. 12. 11. 15:03

문제

chrome.cookies.get 은 cookie 값이 callback 으로 처리되는데, scala Future 로 리턴하는 scalajs facade 로 만들어 보자.

코드

import scala.concurrent.{Future, Promise}
import scala.scalajs.js


object Cookie {
  def getValue(name: String, url: String): Future[String] = {
    val p: Promise[String] = Promise[String]()

    val f: js.Function1[js.Dynamic, Unit] = (info: js.Dynamic) => {
      val pageId = info.value.asInstanceOf[String]
      p.success(pageId)
    }

    js.Dynamic.global.chrome.cookies.get(
      js.Dictionary("name" -> name, "url" -> url),
      f
    )
    p.future
  }
}