我正在尝试从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的响应(如果有帮助的话)。我无法发布整个回复
答案 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 => {
我希望您能通过这些步骤弄清楚,因为您似乎已经从其他变量中提取了数据。我想澄清一下,如果出现此错误,原因是该变量实际上不是数组。不管您多么期望它是一个数组,如果出现此错误,则不是。