在Alexa Lambda意图处理器中使用Node.js fetch遇await语法错误的解决咨询
解决Alexa Lambda中fetch请求的await语法错误问题
错误原因
await关键字只能在被async标记的函数内部使用,你之前的代码直接在非async环境下使用await,导致语法报错;而不用await时,fetch返回的Promise会异步执行,Lambda可能在请求完成前就结束,所以无法获取结果。
解决方案1:使用async/await规范写法
将你的Alexa意图处理器函数标记为async,然后用await依次处理fetch请求和JSON解析,同时加上错误处理:
const fetch = require('node-fetch'); // 给意图处理器函数添加async关键字 async function handleWeatherIntent() { try { // 等待fetch请求完成 const response = await fetch('https://api.weather.gov/points/38.8894,-77.0352'); // 等待响应解析为JSON const weatherData = await response.json(); // 在这里处理返回的数据,比如生成Alexa的响应内容 console.log(weatherData); } catch (error) { // 捕获请求或解析过程中的错误 console.error('HTTP请求失败:', error); } } // 如果是Lambda的主handler,同样要标记为async exports.handler = async (event) => { // 调用意图处理器 await handleWeatherIntent(); // 返回Alexa所需的响应格式 return { // 响应内容... }; };
解决方案2:使用完整Promise链式调用
如果不想用async/await,确保所有依赖请求结果的逻辑都放在then链中,同时Lambda handler要返回Promise,避免提前结束:
const fetch = require('node-fetch'); function handleWeatherIntent() { return fetch('https://api.weather.gov/points/38.8894,-77.0352') .then(res => res.json()) .then(weatherData => { // 处理数据 console.log(weatherData); }) .catch(error => { console.error('请求出错:', error); }); } exports.handler = (event) => { // 返回Promise,让Lambda等待请求完成 return handleWeatherIntent().then(() => { return { // Alexa响应内容 }; }); };
内容的提问来源于stack exchange,提问作者DanL
相关产品推荐
相关产品推荐

