diff --git a/wasm/channels.go b/wasm/channels.go index f7f0aa27fbe76aaa27e75031a0633b0a50bb8efe..9c685776864215898e7721f440926e6c1d02ba27 100644 --- a/wasm/channels.go +++ b/wasm/channels.go @@ -92,25 +92,27 @@ func NewChannelsManager(_ js.Value, args []js.Value) interface{} { // retrieved using [UserDiscovery.GetID]. // - args[2] - username (string). // -// Returns: -// - Javascript representation of the [bindings.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 [bindings.ChannelsManager] +// object. +// - Rejected with an error if loading indexedDb or the manager fails. func NewChannelsManagerWithIndexedDb(_ js.Value, args []js.Value) interface{} { - em, err := indexedDb.NewWasmEventModel(args[2].String()) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil - } + promiseFn := func(resolve, reject func(args ...interface{}) js.Value) { + em, err := indexedDb.NewWasmEventModel(args[2].String()) + if err != nil { + reject(utils.JsTrace(err)) + } - cm, err := bindings.NewChannelsManagerGoEventModel( - args[0].Int(), args[1].Int(), em) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil + cm, err := bindings.NewChannelsManagerGoEventModel( + args[0].Int(), args[1].Int(), em) + if err != nil { + reject(utils.JsTrace(err)) + } else { + resolve(newChannelsManagerJS(cm)) + } } - return newChannelsManagerJS(cm) + return utils.CreatePromise(promiseFn) } // NewChannelsManagerWithIndexedDbDummyNameService constructs a @@ -124,25 +126,27 @@ func NewChannelsManagerWithIndexedDb(_ js.Value, args []js.Value) interface{} { // using [Cmix.GetID]. // - args[1] - Username (string). // -// Returns: -// - Javascript representation of the [bindings.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 [bindings.ChannelsManager] +// object. +// - Rejected with an error if loading indexedDb or the manager fails. func NewChannelsManagerWithIndexedDbDummyNameService(_ js.Value, args []js.Value) interface{} { - em, err := indexedDb.NewWasmEventModel(args[1].String()) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil - } + promiseFn := func(resolve, reject func(args ...interface{}) js.Value) { + em, err := indexedDb.NewWasmEventModel(args[1].String()) + if err != nil { + reject(utils.JsTrace(err)) + } - cm, err := bindings.NewChannelsManagerGoEventModelDummyNameService( - args[0].Int(), args[1].String(), em) - if err != nil { - utils.Throw(utils.TypeError, err) - return nil + cm, err := bindings.NewChannelsManagerGoEventModelDummyNameService( + args[0].Int(), args[1].String(), em) + if err != nil { + reject(utils.JsTrace(err)) + } else { + resolve(newChannelsManagerJS(cm)) + } } - return newChannelsManagerJS(cm) + return utils.CreatePromise(promiseFn) } // NewChannelsManagerDummyNameService constructs a [ChannelsManager]