init = async () => {
    const worker = (this._worker = createWorker(this._workerPath));
    const wasmConfig = await getWebAssemblyLoaderConfig(
      this,
      webAssemblyOptions,
    );
    const canTransfer = await Promise.resolve(canTransferArrayBuffer());
    let transferableObjects;
    const binary = wasmConfig.wasmBinary;
    if (defined(binary) && canTransfer) {
      transferableObjects = [binary];
    }

    const promise = new Promise((resolve, reject) => {
      worker.onmessage = function ({ data }) {
        if (defined(data)) {
          resolve(data.result);
        } else {
          reject(new RuntimeError("Could not configure wasm module"));
        }
      };
    });

    worker.postMessage(
      {
        canTransferArrayBuffer: canTransfer,
        parameters: { webAssemblyConfig: wasmConfig },
      },
      transferableObjects,
    );

    return promise;
  }
Posts a message to a web worker with configuration to initialize loading
and compiling a web assembly module asynchronously, as well as an optional
fallback JavaScript module to use if Web Assembly is not supported.

@param {object} [webAssemblyOptions] An object with the following properties:
@param {string} [webAssemblyOptions.modulePath] The path of the web assembly JavaScript wrapper module.
@param {string} [webAssemblyOptions.wasmBinaryFile] The path of the web assembly binary file.
@param {string} [webAssemblyOptions.fallbackModulePath] The path of the fallback JavaScript module to use if web assembly is not supported.
@returns {Promise<*>} A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks.

@exception {RuntimeError} This browser does not support Web Assembly, and no backup module was provided