检查 js.Value 是否存在
Check if js.Value exists
在 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
是否存在?
javascript if(cursor)
正在检查值是否为 truthy。
您的代码 this.Get
结果为 js.Value
。它不是布尔值,你不能在 Go if
子句中使用它。
syscall/js 包中有 Truthy()
,您可以使用它来模拟 javascript 真实性检查。
https://pkg.go.dev/syscall/js#Value.Truthy
if cursor.Truthy() {
...
}
并检查一个值是否为假,你否定结果:
if !cursor.Truthy() {
...
}
在 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
是否存在?
javascript if(cursor)
正在检查值是否为 truthy。
您的代码 this.Get
结果为 js.Value
。它不是布尔值,你不能在 Go if
子句中使用它。
syscall/js 包中有 Truthy()
,您可以使用它来模拟 javascript 真实性检查。
https://pkg.go.dev/syscall/js#Value.Truthy
if cursor.Truthy() {
...
}
并检查一个值是否为假,你否定结果:
if !cursor.Truthy() {
...
}