我试图在Golang函数内运行JavaScript,并使用fetch在JavaScript上下文中通过api获取JSON。
我在Otto中尝试过使用以下代码:
import "github.com/robertkrimen/otto"
vm := otto.New()
vm.Run(`
function tryfunc() {
console.log("Started");
fetch('https://www.example.com/APIendpoint');
console.log("Success");
}
tryfunc();
`)
Otto使用起来非常简单,但看起来Otto是一个事件总线,不管理取回。
我现在正在尝试v8go使用以下代码:
import v8 "rogchap.com/v8go"
ctx := v8.NewContext()
ctx.RunScript(`fetch("https://www.example.com/APIendpoint"), ""`)
,但它需要另一个参数。文档非常不清楚,很难理解如何运行即使是最简单的JS脚本。
有人能帮忙吗?
Otto和v8实现了ECMAScript,并且在目前的13.0版本中不需要内置函数fetch
(参见:https://262.ecma-international.org/13.0/#sec-function-properties-of-the-global-object),该函数由web浏览器实现。
我相信第二个参数只是一个文件名,用于前缀调试输出(例如:foo.js:14: undefined bar),这在解释器中很常见。
我怀疑你的脚本确实运行了,如果你打印出RunScript的输出(你忽略了两个返回值,JavaScript值和错误),那应该有一个"未定义的函数fetch"值为nil
。仅供参考,在v8go文档中有一个实现fetch
的示例。