Because the syscall/js doc says, (from
https://golang.org/pkg/syscall/js/#FuncOf )
> A wrapped function triggered during a call from Go to JavaScript gets
> executed on the same goroutine. A wrapped function triggered by
> JavaScript's event loop gets executed on an extra goroutine. Blocking
> operations in the wrapped function will block the event loop. As a
> consequence, if one wrapped function blocks, other wrapped funcs will not
> be processed. A blocking function should therefore explicitly start a new
> goroutine.
>
and http.Get() is a blocking function.
Changing doFetch() call in goFetch to "go doFetch()" should work.
2019년 7월 31일 수요일 오전 1시 47분 10초 UTC+9, Patrick Gaubatz 님의 말:
>
> Hi!
>
> When compiled to wasm, the following small application involving the
> net/http client completely crashes the Go runtime:
>
> // +build js,wasm
>
> package main
>
> import (
> "fmt"
> "net/http"
> "syscall/js"
> )
>
> func doFetch() {
> res, err := http.Get("http://localhost:8181")
> fmt.Println(res, err)
> }
>
> func goFetch(this js.Value, inputs []js.Value) interface{} {
> doFetch()
> return nil
> }
>
> func main() {
> fmt.Println("Running doFetch() from wasm directly...")
> doFetch()
> fmt.Println("Now run goFetch() from javascript (this will crash):")
> js.Global().Set("goFetch", js.FuncOf(goFetch))
> select {}
> }
>
>
> All that's needed is calling `goFetch()` in the Web browser's console, as
> you can see in this screenshot:
>
> https://github.com/pgaubatz/golang-wasm-http-client-bug/blob/master/screenshot.png
> The complete source code can be found in this repository:
> https://github.com/pgaubatz/golang-wasm-http-client-bug
> The interesting part is that executing the GET request directly from Go
> using `doFetch()` just works fine.
> Only if the request is triggered via `goFetch()` from Javascript it
> crashes.
> However, in the Web browsers network monitor it can be seen that the
> acutal request is sent out but the Go runtime somehow is not able to
> process the response.
>
> Does anyone have a clue how to debug this problem?
>
> I even tried compiling the example code with the latest Go 1.13 beta
> version using (albeit with not success):
>
> $ docker run --rm -v $PWD:/src -w /src golang:rc-buster
>
> Any hints are really appreciated!
>
> Thank you very much in advance!
>
> Best regards,
> Patrick
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/7b5586b7-bf24-4183-946a-b10c8706e28f%40googlegroups.com.