Javascript 我正在尝试使用从一个axios get请求中提取的数据向Google Books API发出一系列axios get请求

Javascript 我正在尝试使用从一个axios get请求中提取的数据向Google Books API发出一系列axios get请求,javascript,mongodb,express,axios,Javascript,Mongodb,Express,Axios,我在MongoDB上有一个数据库,其中包含有关书籍的信息。在react中,我向该数据库发出一个axios get请求,并检索一个包含20个对象的数组。我用该数组的值更新state。我的目标是通过该数组进行映射,并使用数组中每个项目的isbn编号,向GoogleBooksAPI发出get请求。我想将我数据库中的isbn号与谷歌数据库中的isbn号进行匹配,以检索每本书的封面图像。但是,当我发出第二个axios请求时,有时会成功,但有时会出现以下错误: createError.js:17未捕获(承诺

我在MongoDB上有一个数据库,其中包含有关书籍的信息。在react中,我向该数据库发出一个axios get请求,并检索一个包含20个对象的数组。我用该数组的值更新state。我的目标是通过该数组进行映射,并使用数组中每个项目的isbn编号,向GoogleBooksAPI发出get请求。我想将我数据库中的isbn号与谷歌数据库中的isbn号进行匹配,以检索每本书的封面图像。但是,当我发出第二个axios请求时,有时会成功,但有时会出现以下错误:

createError.js:17未捕获(承诺中)错误:请求失败,状态代码403位于createError(createError.js:17)处,状态代码403位于XMLHttpRequest.handleLoad处的结算(结算.js:19)

我尝试使用本文中的解决方案:

我想我的问题与此类似:

类图书列表扩展组件{
建造师(道具){
超级(道具);
此.state={
数据:[],
谷歌缩略图:[]
};
this.showBooks=this.showBooks.bind(this);
}
展览品(){
让url=“”;
if(process.env.NODE_env==“生产”){
url=process.env.DB_url;
}否则{
url=”http://localhost:8080/books";
}
get(url)。然后(res=>{
//console.log(res.data);
让bookData=res.data;
this.setState({data:bookData});
console.log(bookData);
bookData.map(项目=>{
如果(item.isbns.length>0){
设url2=`https://www.googleapis.com/books/v1/volumes?q=isbn:${item.isbns[0].isbn13}`;
返回axios.get(url2)。然后(结果=>{
控制台日志(结果);
});
}
});
});
}
render(){
返回(
{this.state.data.map(项=>{
返回(
);
})}
看到我们所有的书了吗
);
}
}
导出默认书目;

您可以尝试一次只运行一个文件吗。可能是这样的,谷歌正在限制你的请求,因为你在不到一天的时间内提出了20个请求time@ShubhamJain你知道我有什么办法可以做到吗?一次只调用一个文件,或者延迟每个请求之间的时间量?不太确定。您可以检查API文档是否支持批量请求API,否则可以尝试超时。
class Booklist extends Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [],
      googleThumbnail: []
    };
    this.showBooks = this.showBooks.bind(this);
  }

  showBooks() {
    let url = "";
    if (process.env.NODE_ENV === "production") {
      url = process.env.DB_URL;
    } else {
      url = "http://localhost:8080/books";
    }

    axios.get(url).then(res => {
      // console.log(res.data);
      let bookData = res.data;
      this.setState({ data: bookData });
      console.log(bookData);
      bookData.map(item => {
        if (item.isbns.length > 0) {
          let url2 = `https://www.googleapis.com/books/v1/volumes?q=isbn:${item.isbns[0].isbn13}`;
          return axios.get(url2).then(result => {
            console.log(result);
          });
        }
      });
    });
  }

  render() {
    return (
      <div>
        {this.state.data.map(item => {
          return (
            <Book
              key={item._id}
              title={item.title}
              author={item.author}
              description={item.description}
              // src={this.state.googleThumbnail}
            ></Book>
          );
        })}

        <button className="btn btn-primary btn-lg" onClick={this.showBooks}>
          See All Our Books
        </button>
      </div>
    );
  }
}
export default Booklist;