【发布时间】:2021-11-16 17:38:28
【问题描述】:
在 JavaScript 代码中,我:
function readAll() {
var objectStore = db.transaction("employee").objectStore("employee");
objectStore.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
alert("Name for id " + cursor.key + ", Value: " + cursor.value);
cursor.continue();
} else {
alert("No more entries!");
}
};
}
在我等效的 GO 代码中,我写道:
var ReadAll js.Func
ReadAll = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
defer ReadAll.Release()
cursor := this.Get("result")
if cursor {
_ = cursor.Get("key")
value := cursor.Get("value")
Window.Call("alert", value)
cursor.Call("continue")
} else {
Window.Call("alert", "No more records")
}
return nil
})
db.ObjectStore.Call("openCursor").Set("onsuccess", ReadAll)
但是在编译时,我得到了:
non-bool cursor (type js.Value) used as if condition
我可以检查相关的js.value是否存在?
【问题讨论】:
-
this.Get("result")将返回一个js.Value。您可以检查它是否为布尔值,并获取布尔值。不过,您的 Go 代码看起来不像 JS 代码。 -
这个应该有
webassembly标签吗?我没有看到 Go 特定的 WASM 标记 -
@BurakSerdar 返回的
js.Value不是bool,它是(key, Value) 的对象,而且我更改了代码行,希望现在清楚了。 -
@DanielFarrell 我不明白你的意思,但是我更新了上面的代码。
-
如果要查看
Get的结果是否为有效值,请查看cursor.Truthy()。
标签: go webassembly