未处理的承诺拒绝,从 API 获取数据

Posted

技术标签:

【中文标题】未处理的承诺拒绝,从 API 获取数据【英文标题】:Unhandle promise rejection, getting data from API 【发布时间】:2021-06-21 07:45:23 【问题描述】:
export class Diet extends Component 
  constructor(props) 
    super(props);
    this.state = 
          data: [],
         ;
  
 updateSearch = (e) => 
    axios
      .get(
        `https://api.spoonacular.com/food/products/search?apiKey1234&number=100`
      )
      .then((res) => 
        this.setState( data: res.data );
      );
  ;
   render()
      return(
            <SearchBar  
               placeholder="Search Food..."
               onChangeText=this.updateSearch
               value=data
             />
            <List style= paddingTop: hp("2%") >
              <TouchableOpacity>
                this.state.data.map(( type ) => (
              <Text>this.state.type.products.title</Text>
            ))
              </TouchableOpacity>
            </List>

大家好,我正在尝试使用 axios 从 Spoonacular 数据库中获取数据,我正在尝试使用 SearchBar 搜索食物并在列表中显示内容,我是编程新手我不太确定自己在做什么,当我运行代码时它告诉我[Unhandled promise rejection: Error: Request failed with status code 400] 并且列表上没有显示任何内容。

文档链接:https://spoonacular.com/food-api/docs#Search-Grocery-Products

【问题讨论】:

正如错误所说。请求失败,并且由于您没有添加 .catch,因此拒绝未处理。您可能没有正确请求 API。 谢谢,我添加了.catch,但无法弄清楚API请求有什么问题 【参考方案1】:

您缺少query 参数。根据文档,它是必需的。所以一个正确的请求应该是这样的

let query = ...; //get hte value from the searchbar
axios
  .get(
    `https://api.spoonacular.com/food/products/search?query=$encodeURIComponent(query)&apiKey=1234&number=100`
  )
  .then((res) => 
    this.setState( data: res.data );
  )
  .catch(error => 
    console.log(error.response.data);
  );

错误响应的主体可能会包含一个提示...

【讨论】:

你是对的,问题是如果我插入query=pizza,将显示的唯一结果是比萨饼,如何使用SearchBar 的输入更改查询 我没有使用 react 或 react-native,所以我无法帮助您如何从搜索栏获取值。但是一旦你得到它,你可以简单地将它添加到上面显示的查询中

以上是关于未处理的承诺拒绝,从 API 获取数据的主要内容,如果未能解决你的问题,请参考以下文章

未处理的承诺拒绝,即使我很确定我已经处理了所有这些

从反应原生/[未处理的承诺拒绝:FirebaseError:预期类型'ba',但它是:自定义Oa对象]中获取项目列表

Axios 承诺处理 - 在 react-native 中获取“可能的未处理承诺拒绝 - 类型错误:网络请求失败”

反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map

react-native 错误:[未处理的承诺拒绝:错误:获取 Expo 令牌时遇到错误:TypeError:网络请求失败。]

阿波罗客户端- [未处理的承诺拒绝:错误:响应不成功:收到状态代码 400]