使用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
相关产品推荐
相关产品推荐

