Closed bingtsingw closed 3 years ago
感谢,已改正。第一个问题,应当是 res,而不是 res.data,一是因为不确定 prequest 请求实例返回的具体数据结构里有没有 data 这个字段,因为最终拿到的 res ,是经过各种中间件,拦截器处理后的,有可能 res 本身就是 data 了。
确实有这个问题, res不应该直接取data.
不过现在的调用方式不太直觉, 在不使用拦截器的情况下 const { data, error, loading } = useRequest({ path });
, 这个data并不是返回body中的请求数据, 而是adaptor的response
这个API与主流库差别较大, 想到达到"理想"效果, 需要使用中间件
interceptor.response.use((response) => {
return response.data;
});
不知道能否加一个配置选项, 可以自定义返回res[config]
, 默认为空或者'data'
如果不加配置的话, 可以在文档上面提一下上面拦截器的使用方式
我们调用 prequest 实例,应该直接拿到的是 data 数据,这本来就经过了中间件或者拦截器处理过后的。
const user = await prequest('/user', { params: { id: 1 } })
// user.id
// user.name...
一般来讲,我们在根据HTTP 状态码判断异常那里,就可以对 response 做处理。
prequest.use(async (ctx, next) => {
await next()
const { statusCode, data } = ctx.response
if(statusCode !== 200) throw new Error('网络错误')
ctx.response = data
})
有两个小bug
fetchData
函数中, 应该取res.data
传给defaultUpdate
defaultUpdate
应该接收两个参数, 默认忽略prevData
, 返回新的data