GO WebAssembly के साथ ब्राउज़र IndexedDB तक पहुँचने का प्रयास करते हुए, नीचे दिए गए कोड के साथ मैं ibdexedDB बनाने में सक्षम था, लेकिन मुझे js.Global().Get(dbx) का उपयोग करके या यहां तक ​​​​कि this.result तक पहुंचने का प्रयास करते समय एक त्रुटि मिली।

//go:build js && wasm

package main

import (
    "fmt"
    "syscall/js"
)

var dbOk, dbErr js.Func
var db js.Value

func main() {
    fmt.Println("Hello WASM")
    db = js.Global().Get("indexedDB").Call("open", "Database", 1)

    dbOk = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
        defer dbOk.Release()
/* Here I've an error */
        dbx := this.result
        fmt.Println("this is: ", dbx)
/**********************/
        js.Global().Call("alert", "ok.")
        return nil
    })
    db.Set("onsuccess", dbOk)

    dbErr = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
        defer dbErr.Release()

        js.Global().Call("alert", "sorry.")
        return nil
    })
    db.Set("onerror", dbErr)
    
    /* This line is wrong, can not access `db` */
    js.Global().Get(dbx).Call("transaction", "readwrite").Call("objectStore", "employee").Call("add", `{ id: "00-01", name: "Karam", age: 19, email: "kenny@planet.org" }`)

    c := make(chan int)
    <-c
}

मुझे मिली त्रुटि है:

# command-line-arguments
./wasm.go:21:14: this.result undefined (type js.Value has no field or method result)
./wasm.go:41:17: cannot use dbx (type js.Value) as type string in argument to js.Global().Get

इसे जावास्क्रिप्ट के साथ मैप करने के लिए, मुझे यह चाहिए था go:

    dbOk = js.FuncOf(func(this js.Value, args []js.Value) interface{} {
        defer dbOk.Release()
        dbx := this.result
        fmt.Println("this is: ", dbx)
        js.Global().Call("alert", "ok.")
        return nil
    })
    db.Set("onsuccess", dbOk)

इस जावास्क्रिप्ट के बराबर होने के लिए:

var dbx

request.onsuccess = function(event) {
    dbx = request.result;
    console.log("success: "+ dbx);
};

और यह गो कोड:

js.Global().Get(dbx).Call("transaction", "readwrite").Call("objectStore", "employee").Call("add", `{ id: "00-03", name: "Karam", age: 19, email: "kenny@planet.org" }`)

इस जावास्क्रिप्ट कोड को बदलने के लिए:

dbx.transaction(["employee"], "readwrite")
    .objectStore("employee")
    .add({ id: "00-03", name: "Karam", age: 19, email: "kenny@planet.org" });
0
Hasan A Yousef 15 नवम्बर 2021, 17:44

1 उत्तर

सबसे बढ़िया उत्तर

इस संदर्भ में, this एक Javascript ऑब्जेक्ट है, इसलिए आपको इसका गुण result प्राप्त करना होगा:

result:=this.Get("result")

result एक js.Value होगा, और यदि यह एक आदिम है, तो आप इसका गो मान प्राप्त कर सकते हैं, या result.Get(), या Call का उपयोग करके आगे के ऑब्जेक्ट तत्वों में उतर सकते हैं। इसकी एक विधि।

2
Burak Serdar 15 नवम्बर 2021, 18:05
इतना ही, पूरी तरह से काम किया
 – 
Hasan A Yousef
15 नवम्बर 2021, 20:08