You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用async/await封装从URL获取XLSX并转换为JSON的函数

从URL获取XLSX并转换为JSON的异步函数修复

问题核心

你当前代码的问题在于**XMLHttpRequest.send() 不返回Promise**,直接链式调用.then()无效,导致await Get_JSON()无法正确等待请求完成,外部变量自然拿不到结果。

修正后的代码

async function Outside_Test(){
    try {
        var reso = await Get_JSON()
        console.log('reso_out')
        console.log(reso)
    } catch (err) {
        console.error('请求或转换失败:', err)
    }
}

function Get_JSON() {
    var url = "http://myspreadsheet.xlsx"
    // 用Promise包裹XHR请求,让async/await能正确等待异步操作
    return new Promise((resolve, reject) => {
        var oReq = new XMLHttpRequest();
        oReq.open("GET", url, true);
        oReq.responseType = "arraybuffer";

        oReq.onload = function() {
            if (oReq.status >= 200 && oReq.status < 300) {
                var arraybuffer = oReq.response;

                /* 保留你原有的二进制转换逻辑 */
                var data = new Uint8Array(arraybuffer);
                var arr = new Array();
                for (var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
                var bstr = arr.join("");

                /* XLSX解析与JSON转换 */
                var workbook = XLSX.read(bstr, { type: "binary" });
                var first_sheet_name = workbook.SheetNames[0];
                var worksheet = workbook.Sheets[first_sheet_name];
                var reso = XLSX.utils.sheet_to_json(worksheet, { raw: true });
                
                console.log('inside-reso')
                resolve(reso) // 传递转换完成的JSON结果
            } else {
                reject(new Error(`请求失败,状态码:${oReq.status}`))
            }
        }

        oReq.onerror = function() {
            reject(new Error('网络请求出错'))
        }

        oReq.send()
    })
}

关键改动说明

  • 用Promise包裹整个XHR请求流程,通过resolve返回最终JSON结果,reject抛出错误,让await能正确等待异步操作完成
  • 在onload回调中增加请求状态判断,确保成功后再执行转换逻辑
  • 给Outside_Test添加try/catch,方便捕获请求或转换过程中的异常
  • 移除无效的oReq.send().then()写法,改用Promise标准回调处理异步逻辑

内容的提问来源于stack exchange,提问作者FreeSoftwareServers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:40:25