如何将axios请求返回的JSON结果传给其他函数?调用报400错误怎么解决?
问题原因
你代码里有几个核心错误直接导致了400报错和未处理的Promise异常:
- id取值错误:
id = console.log(res.data.result.items[number].memberId)这行代码中,console.log()的返回值是undefined,所以你实际传给memberGet的参数永远是undefined,并不是你想要的memberId值。 - 请求URL参数未替换:
memberUrl里的[mem]只是普通字符串,不会自动替换成你传入的mem参数值,最终发起请求的URL里带着[mem]字符串,不符合接口要求自然返回400状态码。 - 循环下标逻辑问题:do-while循环先执行
number +=1,第一次取值是下标1的元素,直接跳过了下标为0的第一个成员数据。 - 异步函数无错误处理:调用
memberGet是异步函数,你没有加await也没有做catch错误捕获,所以接口报错会抛出未处理的Promise拒绝警告。
修正后的代码
async function membersGet() { const members = 'http://legislation.nysenate.gov/api/3/members/2020?mykey' const config = { method: 'get', url: members } try { let res = await axios(config) // 直接循环前5个,下标0到4 for (let number = 0; number < 5; number++) { const id = res.data.result.items[number].memberId; // 调用异步函数加await,也可以单独加catch捕获单个请求错误避免影响其他请求 await memberGet(id); } } catch (err) { console.error('获取成员列表失败:', err) } } async function memberGet(mem) { // 用模板字符串替换mem参数 const memberUrl = `http://legislation.nysenate.gov/api/3/members/2013/${mem}?key=mykey` const config = { method: 'get', url: memberUrl } try { let res = await axios(config) const chamber = res.data.result.chamber const name = res.data.result.fullName const district = res.data.result.districtCode const mail = res.data.result.imgName console.log(chamber, name, district, mail); } catch (err) { console.error(`获取成员${mem}详情失败:`, err) } }
内容的提问来源于stack exchange,提问作者Upstate NY
相关产品推荐
相关产品推荐

