如何修复array.forEach不是一个函数

时间:2019-01-09 07:21:51

标签: reactjs

我正在尝试从freelancer 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]是自由职业者api的响应(如果有帮助的话)。我无法发布整个回复

1 个答案:

答案 0 :(得分:1)

我经常看到这种调试技术,人们会像现在一样遇到错误,并认为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 => {

我希望您能通过这些步骤弄清楚,因为您似乎已经从其他变量中提取了数据。我想澄清一下,如果出现此错误,原因是该变量实际上不是数组。不管您多么期望它是一个数组,如果出现此错误,则不是。