以下代码检查字段是否为文件类型,以及其中是否存在实际文件。如果是这种情况,请上传照片并更新建筑物。如果不是这样,请使用旧照片更新建筑物:
fields.forEach(field => {
building[field.name] = field.value || this.building[field.name]
if (field.type === 'file' && !util.isEmpty(field.photo.file)) {
api.uploadPhoto(field.photo.file).then(resp => {
building[field.name] = resp
this.updateBuilding(building)
})
} else {
building.logo = this.building.logo // to prevent updating logo
building.floorplan = this.building.floorplan // to prevent updating logo
this.updateBuilding(building)
}
})
效果很好,但由于this.updateBuilding(building)
处于循环中,因此它被称为倍数。
如何做到只在最后一次迭代中调用?
答案 0 :(得分:3)
您可以查看 fields array 的 fields.length ,它将是fields数组的最后一个元素。
if(fields[fields.length - 1]){
// Loop control will enter in this block in last iteration
// Enter your update code inside this
}
希望这就是你要找的东西。
答案 1 :(得分:2)
MDN documentation
表示回调forEach
有三个参数:
您可以使用它来检查当前元素的索引是否等于数组的最后一个索引:
fields.forEach((field, index, array) => {
// YOUR CODE
if (index === array.length - 1) {
// DO SOMETHING
}
});
答案 2 :(得分:1)
在每次迭代时使用一个递增的count变量,如果field.length等于count变量,则使用if条件调用函数
var count = 0;
var fields_length = fields.length;
fields.forEach(field => {
building[field.name] = field.value || this.building[field.name]
if (field.type === 'file' && !util.isEmpty(field.photo.file)) {
api.uploadPhoto(field.photo.file).then(resp => {
building[field.name] = resp
})
} else {
building.logo = this.building.logo // to prevent updating logo
building.floorplan = this.building.floorplan // to prevent updating logo
}
if(count == fields_length){
this.updateBuilding(building)
}
count++
})
答案 3 :(得分:1)
尝试:
var len = fields.length;
var counter = 0;
fields.forEach(field => {
building[field.name] = field.value || this.building[field.name]
if (field.type === 'file' && !util.isEmpty(field.photo.file)) {
api.uploadPhoto(field.photo.file).then(resp => {
building[field.name] = resp
/* checking if it's the last loop */
if(counter == len - 1)
this.updateBuilding(building)
})
} else {
building.logo = this.building.logo // to prevent updating logo
building.floorplan = this.building.floorplan // to prevent updating logo
this.updateBuilding(building)
}
counter = counter + 1;
})
答案 4 :(得分:1)
如何创建一些变量以在循环中保存适当的值; 循环之后,您可以使用这些变量运行构建更新。
<强>更新强>
哦,你实际上需要一个回调更新。 你在循环中有一些异步操作???