问题描述
我写了一个小函数 await
来处理 go 中的异步 javascript 函数:
func await(awaitable js.Value) (ret js.Value,ok bool) {
if awaitable.Type() != js.TypeObject || awaitable.Get("then").Type() != js.TypeFunction {
return awaitable,true
}
done := make(chan struct{})
onResolve := js.FuncOf(func(this js.Value,args []js.Value) interface{} {
glg.Info("resolve")
ret = args[0]
ok = true
close(done)
return nil
})
defer onResolve.Release()
onReject := js.FuncOf(func(this js.Value,args []js.Value) interface{} {
glg.Info("reject")
ret = args[0]
ok = false
close(done)
return nil
})
defer onReject.Release()
onCatch := js.FuncOf(func(this js.Value,args []js.Value) interface{} {
glg.Info("catch")
ret = args[0]
ok = false
close(done)
return nil
})
defer onCatch.Release()
glg.Info("before await")
awaitable.Call("then",onResolve,onReject).Call("catch",onCatch)
// i also tried go func() {awaitable.Call("then",onCatch)}()
glg.Info("after await")
<-done
glg.Info("I never reach the end")
return
}
问题是,当我使用或不使用 goroutine 调用该函数时,事件处理程序似乎被阻止,我被迫重新加载页面。我从未进入任何回调,我的频道从未关闭。有没有什么惯用的方法可以在 wasm 中调用来自 Golang 的 promise 的 await ?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)