如何将Fetch请求结果带出双层.then回调?
问题原因与解决方案
你的核心问题是第一个.then的回调没有返回内层的Promise,导致getList()返回的Promise在getOrderList()完成后就直接resolve了undefined,根本没等内层standardFetchCall的异步请求结束。
方案一:修正Promise链式调用
只需要在第一个.then里返回standardFetchCall(payload),让Promise链继续等待内层异步操作完成,数据就能自然传递到外层的.then:
// 去掉全局变量emptyList,用Promise返回数据更可靠 function getList() { return getOrderList() .then(payload => { // 返回内层Promise,让链式调用延续 return standardFetchCall(payload); }); } // 外层调用就能拿到正确数据 getList() .then(list => { console.log(list); // 现在能正常打印数据了 }) .catch(err => { // 务必添加错误处理,避免异步错误被忽略 console.error('请求失败:', err); });
方案二:用async/await提升可读性
如果追求更简洁易读的代码,推荐使用async/await语法,把异步代码写成类似同步的结构:
async function getList() { // 等待getOrderList返回payload const payload = await getOrderList(); // 等待standardFetchCall返回数据 const list = await standardFetchCall(payload); // 返回数据给调用方 return list; } // 调用方式 getList() .then(list => { console.log(list); }) .catch(err => { console.error('请求失败:', err); }); // 或者在async函数里直接await调用(更简洁) // async function handleList() { // try { // const list = await getList(); // console.log(list); // } catch (err) { // console.error(err); // } // } // handleList();
额外提醒
不要用全局变量存储异步请求的数据,异步操作的执行时机不可控,全局变量很容易导致数据状态混乱。直接通过Promise返回或await获取数据才是可靠的做法。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

