&引用;找不到隐式ExecutionContext“;scala.js示例应用程序中出现错误。

&引用;找不到隐式ExecutionContext“;scala.js示例应用程序中出现错误。,scala,scala.js,implicits,Scala,Scala.js,Implicits,下面是Scala.js电子书中的一个示例: package webpage import org.scalajs.dom.ext.Ajax import scala.scalajs.js import scala.scalajs.js.annotation.JSExport import scalatags.JsDom.all._ import org.scalajs.dom import dom.html @JSExport object HelloWorld1 extends {

下面是Scala.js电子书中的一个示例:

package webpage

import org.scalajs.dom.ext.Ajax

import scala.scalajs.js
import scala.scalajs.js.annotation.JSExport
import scalatags.JsDom.all._
import org.scalajs.dom
import dom.html

@JSExport
object HelloWorld1 extends {
  @JSExport
  def main(target: html.Div) = {

    lazy val box = input(
      `type`:="text",
      placeholder:="Type here!"
    ).render

    lazy val output = div(
      height:="400px",
      overflowY:="scroll"
    ).render

    box.onkeyup = (e: dom.Event) => {
      output.innerHTML = "Loading..."
      fetchWeather(box.value)
    }

    target.appendChild(
      div(
        h1("Weather Search"),
        p(
          "Enter the name of a city to pull the ",
          "latest weather data from api.openweathermap.com!"
        ),
        p(box),
        hr, output, hr
      ).render
    )

    def fetchWeather(query: String) = {
      val searchUrl =
        "http://api.openweathermap.org/data/" +
          "2.5/find?type=like&mode=json&q=" +
          query

      for{
        xhr <- Ajax.get(searchUrl)
        if query == box.value
      } js.JSON.parse(xhr.responseText).list match{
        case jsonlist: js.Array[js.Dynamic] =>
          output.innerHTML = ""
          showResults(jsonlist, query)
        case _ =>
          output.innerHTML = "No Results"
      }
    }
    def showResults(jsonlist: js.Array[js.Dynamic], query: String) = {
      for (json <- jsonlist) {
        val name = json.name.toString
        val country = json.sys.country.toString
        val weather = json.weather.pop().main.toString

        def celsius(kelvins: js.Dynamic) = {
          kelvins.asInstanceOf[Double] - 273.15
        }.toInt

        val min = celsius(json.main.temp_min)
        val max = celsius(json.main.temp_max)
        val humid = json.main.humidity.toString
        val (first, last) = name.splitAt(query.length)
        output.appendChild(
          div(
            b(span(first, backgroundColor:="yellow"), last, ", ", country),
            ul(
              li(b("Weather "), weather),
              li(b("Temp "), min, " - ", max),
              li(b("Humidity "), humid, "%")
            )
          ).render
        )
      }
    }
  }
}

这里出了什么问题?

如错误所示,添加以下导入:

import scala.concurrent._
import ExecutionContext.Implicits.global
我在使用“import net.kaliber.mailer.u”使用Scala发送电子邮件。 以及获取“没有为参数ec找到隐式:”错误。 导入以下两个库后,该问题得到解决

import scala.concurrent._

import ExecutionContext.Implicits.global

我相信答案的前半部分是正确的(IIRC,
scala.concurrent.ExecutionContext.Implicits.global
的别名是
scala.scalajs.concurrent.JSExecutionContext.queue
,这是您想要的),但后半部分不是。记住,这是一个Scala.js问题——没有线程池或线程之类的问题。它是一个单线程执行引擎,所以它是一个简单得多的环境…@JustinduCoeur,我不熟悉Scala.js。无论如何,这都没有意义。导入隐式提供的默认线程执行环境是forkjoinpool,其预处理的线程数等于机器上的处理器数。因此,如果这不是所需的语义,那么第一部分也是错误的。请随意编辑答案,完全符合您认为正确的答案。Scala.js是Scala运行时的重新实现,在JavaScript上运行,而不是在JVM上运行。唯一可用的线程执行环境是一个特殊的单线程环境,因为JavaScript基本上是单线程的——像fork/join池这样的东西是非sequeuiters的,因为它们是JVM特有的。在语法上,您仍然需要添加ExecutionContext的导入,以使Scala编译器满意,但它只有一个合法的定义…@JustinDuCoeur最后一位实际上不是100%正确的。在提供JavaScript承诺的较新JS环境中,执行上下文可以选择使用承诺事件循环(紧循环)或setTimeout事件循环(UI事件循环)。在问题的第二部分得到解决之前,进行向下投票。您不需要导入两个库,只需导入一个对象。您的两行代码相当于导入scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent._

import ExecutionContext.Implicits.global