检查 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() {
  ...
}