更新异常处理机制,不抛出异常,应当判断返回值然后用 getLastError() 来获得错误信息
This commit is contained in:
parent
7845a0d3dd
commit
db25764e8e
20
bridge.go
20
bridge.go
@ -1,7 +1,6 @@
|
||||
package gojs
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"runtime"
|
||||
@ -104,6 +103,7 @@ func go2js(in any, n int, vm *goja.Runtime) any {
|
||||
// 将go的函数转换为js的函数
|
||||
t := v.Type()
|
||||
return func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||||
vm.SetData("_lastError", nil)
|
||||
needArgs := make([]reflect.Type, 0)
|
||||
realArgs := make([]reflect.Value, t.NumIn())
|
||||
needArgsIndex := map[int]int{}
|
||||
@ -315,25 +315,35 @@ func go2js(in any, n int, vm *goja.Runtime) any {
|
||||
for _, outValue := range outValues {
|
||||
outType := outValue.Type()
|
||||
if outType.String() == "error" {
|
||||
var retErr error
|
||||
if !outValue.IsNil() {
|
||||
// 抛出异常
|
||||
if err, ok := outValue.Interface().(*common.GoErr); ok && err != nil {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
retErr = err
|
||||
} else if err, ok := outValue.Interface().(error); ok && err != nil {
|
||||
if err1, ok1 := err.(*common.GoErr); ok1 {
|
||||
if err1 != nil {
|
||||
panic(vm.NewGoError(err1))
|
||||
// panic(vm.NewGoError(err1))
|
||||
retErr = err1
|
||||
}
|
||||
} else {
|
||||
panic(vm.NewGoError(err))
|
||||
// panic(vm.NewGoError(err))
|
||||
retErr = err
|
||||
}
|
||||
} else {
|
||||
errStr := u.String(outValue.Interface())
|
||||
if errStr != "" {
|
||||
panic(vm.NewGoError(errors.New(errStr)))
|
||||
// panic(vm.NewGoError(errors.New(errStr)))
|
||||
retErr = err
|
||||
}
|
||||
}
|
||||
}
|
||||
if retErr != nil {
|
||||
GetLogger(vm).Error(retErr.Error())
|
||||
vm.SetData("_lastError", retErr)
|
||||
}
|
||||
|
||||
// 忽略error参数
|
||||
continue
|
||||
}
|
||||
|
||||
3
gojs.go
3
gojs.go
@ -560,6 +560,9 @@ func New() *Runtime {
|
||||
}
|
||||
vm.Set("__startExec", os.Args[0])
|
||||
vm.SetData("logger", log.New(u.ShortUniqueId()))
|
||||
vm.Set("getLastError", func(call goja.FunctionCall) goja.Value {
|
||||
return rt.vm.ToValue(rt.vm.GetData("_lastError"))
|
||||
})
|
||||
|
||||
// 处理模块引用
|
||||
// TODO 调试goja,require.NewRegistryWithLoader 引用到第三层就不在执行了,是有什么限制吗?代码会卡住没有反应也不结束。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user