我试图从自由职业者api中获取作业列表,并显示作业列表,并能够保存这些作业。在此过程中,我将维护savedGigs数组,将保存的项推送到数组中。我收到了一个错误:
savedGigs.forEach不是一个函数。
这件事需要帮助。
checkIfGigIsSaved = (savedGigs, freelancerGigId) => {
  let isLiked = false;
  savedGigs.forEach(gigItem => {
    if (gigItem.gigId === freelancerGigId && !isLiked) {
      isLiked = true;
    }
  });
  return isLiked;
}
componentDidMount() {
  let interval = window.setInterval(() => {
    if (uid !== null) {
      clearInterval(interval);
      const promise1 = this.fetchSavedGigs();
      const promise2 = this.fetchFreelancerJobs();
      let currentState = this.state;
      Promise.all([promise1, promise2]).then(values => {
        const savedGigs = values[0];
        const freelancerJobs = values[1].data.result.projects;
        freelancerJobs.forEach(project => {
          currentState.listOfJobs.push({
            bid_avg: project.bid_stats.bid_avg,
            bid_count: project.bid_stats.bid_count,
            budget_minimum: project.budget.minimum,
            budget_maximum: project.budget.maximum,
            frontend_project_status: project.frontend_project_status,
            time_submitted: project.time_submitted,
            title: project.title,
            type: project.type,
            preview_description: project.preview_description,
            id: project.id,
            isLiked: this.checkIfGigIsSaved(savedGigs, project.id)
          });
        });
        this.setState({
          listOfJobs: currentState.listOfJobs,
          isFreelancerApiSuccess: true,
          freelancerApiInProgress: false,
          savedGigs: savedGigs
        });
      });
    }
  }, 250);
}values[0]是对象数组,如
[ { gigId: 18489216, rank: 1 }, { gigId: 18489200, rank: 2 }, { gigId: 18489102, rank: 3 } ]如果这有帮助的话,value[1]就是来自免费的lancer的响应。我不能把所有的回复都发出去
发布于 2019-01-09 09:38:27
我经常看到这种调试技术,人们会得到像现在这样的错误,并且假设javascript在某个地方出错了。您没有拼错.forEach,也没有拼写变量名。那么剩下的就是savedGigs不是一个数组。
我知道,我知道,你认为是的。
但事实并非如此,这正是savedGigs.forEach is not a function.非常清楚的错误所在。
它可能非常类似于数组,比如一个包含数组的属性的对象(例如。{ data: [...] })。
要确保,请在发生错误的地方之前记录数据。你会发现它确实不是一个数组。
checkIfGigIsSaved = (savedGigs, freelancerGigId) => {
  let isLiked = false;
  // Log **right here**, which is important to get the exact value before the error
  console.log('savedGigs:', savedGigs);
  savedGigs.forEach(gigItem => {我希望您能用这些步骤解决这个问题,因为您似乎已经从一个不同的变量中提取了数据。我想说明的是,如果您得到了这个错误,原因是变量是,实际上不是数组。不管你多么期望它是一个数组,如果你得到这个错误,它不是。
https://stackoverflow.com/questions/54105008
复制相似问题