微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Uncaught (in promise) TypeError: res.map is not a function

如何解决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 举报,一经查实,本站将立刻删除。