如何解决Uncaught (in promise) TypeError: res.map is not a function
我正在尝试从 React Native 应用程序中的 url 获取部门列表
import React,{ useState,useEffect} from 'react';
import { StyleSheet,LogBox,View,Text } from 'react-native';
export default function App() {
var [department,setDepartment]=useState([])
const token = /* my token here */
const getDepartments=()=>{
const url = /*my api's url here*/
return fetch(url,{
method: 'GET',headers: { "Authorization": "Bearer" + token,'Accept': 'application/json','Content-Type':'application/json'
}
})
.then(response => response.json())
.then(data=>console.log(data)) // returns the correct data
.catch(error => console.error(error))
}
const getdepartment = async () => {
await getDepartments().then((res) => //here lays the problem
{res.map((p,key) => {
department.push({
name: p.name,id: p.id,});
});
});
};
useEffect(() => {
getdepartment();
},[]);
return (
<View>
<Text>
{department[0]}
</Text>
</View>
)
}
尽管 getDepartments() 函数从 url 返回正确的数据,但这里 getdepartment() 函数中的 res 未定义
解决方法
您不是从 getDepartments 返回值,只是一个简单的 console.log。
可以在 async/await 中转换函数:
const getDepartments = async () => {
const url = /*my api's url here*/
try {
const response = await fetch(url,{
method: 'GET',headers: { "Authorization": "Bearer" + token,'Accept': 'application/json','Content-Type':'application/json'
}
})
return await response.json();
} catch(e){
// error
}
}
或从您的函数返回一个值:
const getDepartments=()=>{
const url = /*my api's url here*/
return fetch(url,'Content-Type':'application/json'
}
})
.then(response => response.json())
.catch(error => console.error(error))
}
,
如果您要返回提取的结果,则只需返回从中获得的结果,问题与提取一起出现,响应也会被处理,并且返回的完整内容不是结果,因此您只需要跳过这一行 .then(data=>console.log(data))
const getDepartments=()=>{
const url = /*my api's url here*/
return fetch(url,{
method: 'GET','Content-Type':'application/json'
}
}).then(response => response.json()).catch(error =>
console.error(error))
}
//这里获取结果后可以映射数据
const getdepartment = async () => {
await getDepartments().then((res) =>
{res.map((p,key) => {
department.push({
name: p.name,id: p.id,});
});
});
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。