throw (e) {
        e = format(e);

        if (!this.__errorThrown) {
            this.__errorThrown = true;
            this.__onThrow();

            if (this.__asyncErrorListener) {
                this.__asyncErrorListener(e);
            } else {
                throw e;
            }
        }
    }
@param {object|string} e 
@return {void|never}