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

使用JavaScript Node-fetch获取多个Google日历数据时数组为空求助

问题分析

你的无服务器函数存在异步操作未完成就返回结果的核心问题:循环里的fetch是异步任务,函数会直接执行到return语句,此时datas数组还没被填充任何数据,所以前端拿到的是空数组。

修复方案

改用Promise.all批量处理所有异步请求,确保所有API调用完成后再返回结果:

修改后的calFetch.mjs代码:

exports.handler = async function (event, context){
    try{
        if(event.httpMethod === "GET" ){
            // 将每个fetch请求转为Promise,收集到数组中
            const fetchPromises = urls.map(url => 
                fetch(url)
                    .then(response => response.json())
                    .then(data => data.items)
            );
            // 等待所有请求完成,获取完整结果数组
            const datas = await Promise.all(fetchPromises);
            return  {
                statusCode: 200,
                body: JSON.stringify(datas),
                HEADERS,
            }   
        }
        return {
            statusCode: 401
        }
    } catch(e){
        console.error(e)
        return {
            statusCode: 500,
            body: e.toString()
        }
    }
}
额外提示
  • Promise.all会按传入的urls顺序返回对应结果,保证数据顺序一致
  • 原循环未声明i(缺少let/const)会造成全局变量污染,用map可避免这个问题
  • 前端main.js逻辑无需修改,后端返回正确数组后即可正常处理事件数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:10:00