JavaScript异步HTTP请求返回值未定义问题求简易解决方案
解决异步JavaScript中返回值undefined的问题
嘿,我太懂这种异步回调踩坑的憋屈感了!你猜的没错——console.log(list)确实在GetData的异步请求完成前就执行了,而且你在http.get回调里写的return根本不会让GetData返回任何值,因为那是回调函数自己的返回,和外层的GetData没关系。
给你两个超简短的修复方案,选哪个看你习惯:
方案1:用回调函数(最直接的传统写法)
把你要处理结果的逻辑(比如打印)放进一个回调函数里,等请求完成后再触发:
function GetData(callback) { http.get(options, function (error, response, body) { // 请求完成后调用回调,把结果传进去 callback(JSON.stringify(body.results[0].members)); }); } // 调用时传入处理逻辑 GetData(function(list) { console.log(list); // 这下就能拿到正确结果了! });
方案2:用Promise + async/await(更现代易读的写法)
把异步请求包装成Promise,再用await等待结果,代码看起来像同步的:
function GetData() { return new Promise((resolve, reject) => { http.get(options, function (error, response, body) { if (error) { reject(error); // 请求出错时抛出错误 return; } resolve(JSON.stringify(body.results[0].members)); // 请求成功返回结果 }); }); } // 注意await必须在async函数里使用 async function fetchAndLog() { var list = await GetData(); console.log(list); } fetchAndLog();
如果你的运行环境支持(比如Node.js 8及以上),更推荐第二个方案,逻辑更清晰,也更容易处理错误。
内容的提问来源于stack exchange,提问作者Jimmy D
相关产品推荐
相关产品推荐

