diff --git a/wasm/channels.go b/wasm/channels.go index 61e2012a4a2f875895ee2333d2c0202fd9b43c51..f93a95c5498f107000b7dcfd8c6f17d9d969a60e 100644 --- a/wasm/channels.go +++ b/wasm/channels.go @@ -229,31 +229,33 @@ func LoadChannelsManager(_ js.Value, args []js.Value) interface{} { // - args[1] - Bytes of a private identity ([channel.PrivateIdentity]) that is // generated by [GenerateChannelIdentity] (Uint8Array). // -// Returns: -// - Javascript representation of the [ChannelsManager] object. -// - Throws a TypeError if initialising indexedDb or created the new channel -// manager fails. +// Returns a promise: +// - Resolves to a Javascript representation of the [ChannelsManager] object. +// - Rejected with an error if loading indexedDb or the manager fails. func NewChannelsManagerWithIndexedDb(_ js.Value, args []js.Value) interface{} { privateIdentity := utils.CopyBytesToGo(args[1]) - emBuilder := func(path string) channels.EventModel { - em, err := indexedDb.NewWasmEventModel(path) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil + promiseFn := func(resolve, reject func(args ...interface{}) js.Value) { + emBuilder := func(path string) channels.EventModel { + em, err := indexedDb.NewWasmEventModel(path) + if err != nil { + reject(utils.JsTrace(err)) + return nil + } + + return em } - return em - } - - cm, err := bindings.NewChannelsManagerGoEventModel( - args[0].Int(), privateIdentity, emBuilder) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil + cm, err := bindings.NewChannelsManagerGoEventModel( + args[0].Int(), privateIdentity, emBuilder) + if err != nil { + reject(utils.JsTrace(err)) + } else { + resolve(newChannelsManagerJS(cm)) + } } - return newChannelsManagerJS(cm) + return utils.CreatePromise(promiseFn) } // LoadChannelsManagerWithIndexedDb loads an existing [ChannelsManager] using @@ -270,28 +272,31 @@ func NewChannelsManagerWithIndexedDb(_ js.Value, args []js.Value) interface{} { // - args[1] - The storage tag associated with the previously created channel // manager and retrieved with [ChannelsManager.GetStorageTag] (string). // -// Returns: -// - Javascript representation of the [ChannelsManager] object. -// - Throws a TypeError if loading the manager fails. +// Returns a promise: +// - Resolves to a Javascript representation of the [ChannelsManager] object. +// - Rejected with an error if loading indexedDb or the manager fails. func LoadChannelsManagerWithIndexedDb(_ js.Value, args []js.Value) interface{} { - emBuilder := func(path string) channels.EventModel { - em, err := indexedDb.NewWasmEventModel(path) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil + promiseFn := func(resolve, reject func(args ...interface{}) js.Value) { + emBuilder := func(path string) channels.EventModel { + em, err := indexedDb.NewWasmEventModel(path) + if err != nil { + reject(utils.JsTrace(err)) + return nil + } + + return em } - return em - } - - cm, err := bindings.LoadChannelsManagerGoEventModel( - args[0].Int(), args[1].String(), emBuilder) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil + cm, err := bindings.LoadChannelsManagerGoEventModel( + args[0].Int(), args[1].String(), emBuilder) + if err != nil { + reject(utils.JsTrace(err)) + } else { + resolve(newChannelsManagerJS(cm)) + } } - return newChannelsManagerJS(cm) + return utils.CreatePromise(promiseFn) } // GenerateChannel is used to create a channel a new channel of which you are