使用.map调用API仅返回payload,如何获取接口真实返回数据
问题核心原因
- API调用属于异步操作,你代码中使用的
call如果是Redux Saga的API,返回的是Effect描述对象;如果是普通异步请求,返回的是Promise实例,二者都不是接口的真实返回结果。直接在map中return的话,最终得到的是包含多个异步占位对象的数组,自然无法拿到真实返回数据。
解决方案
分两种常用场景处理:
场景1:普通JS/TS异步环境(使用fetch/axios等返回Promise的请求库)
用Promise.all等待所有异步请求完成,即可拿到全部返回结果,代码示例:
const requestURL = `https://jsonplaceholder.typicode.com/posts/1/comments`; // 先生成所有请求的Promise数组 const requestPromises = apis1.map(ap => { return request(requestURL + ap.etc) }) // 等待所有请求执行完成 const gg = await Promise.all(requestPromises) console.log(gg) // 此处输出所有接口真实返回数据组成的数组
注意:上述await操作需要放在async函数内部才能正常运行
场景2:Redux Saga环境(即你代码中使用call Effect的场景)
需要配合Saga的all Effect并行等待所有call请求执行完成,代码示例:
import { call, all } from 'redux-saga/effects' function* yourSaga() { const requestURL = `https://jsonplaceholder.typicode.com/posts/1/comments`; const requestEffects = apis1.map(ap => { return call(request, requestURL + ap.etc) }) // 等待所有call执行完成 const gg = yield all(requestEffects) console.log(gg) // 此处输出所有接口真实返回数据组成的数组 }
额外注意点
- 如果你需要实现单个请求失败不影响其他请求的效果,可以给每个请求外层包一层
catch,返回自定义错误标识,避免Promise.all/all触发全局熔断逻辑。
内容的提问来源于stack exchange,提问作者vegas red
相关产品推荐
相关产品推荐

