回调已经被调用!在环回中,在 updateAll 函数中
callback was already called! in loopback, in updateAll function
我在这里使用环回,同时使用数组中的对象列表进行更新调用。
我得到的回调已经调用了!
场景是,我在循环内部定义了回调,在第一个循环中,它实际上是调用了get in。
我在找
的路
我应该更新查询中的所有对象列表 MySQL 计划调用。
Inward.updateIsActiveDetails = function(data, callback) {
var id = _.map(data, 'id');
if (id.length > 0) {
_.forEach(id, id => {
console.log('id....:', id)
Inward.updateAll({id}, {
isActive: 0,
}).then(updateresult => {
console.log(updateresult);
// callback(error); showing err with it... (callback already called)
}).catch(function(error) {
callback(error);
});
});
} else {
callback(null, {
success: true,
msg: 'No records to update',
});
}
};
输出:
id....: 3
id....: 4
{ count: 1 }
{ count: 1 }
感谢正确的解决方案
回调应该被调用一次,您是在循环中调用它,因此它会在循环的每次迭代中被调用。不止一次。如果出于某种原因您不能使用 async/await,则以下内容是正确的。
Inward.updateIsActiveDetails = function(data, callback) {
var id = _.map(data, 'id');
var len = id.length;
var resultList = [];
// When you call this function we add the results to our list
// If the list of updates is equal to the number of updates we had to perform, call the callback.
function updateResultList(updateResult) {
resultList.push(updateResult);
if (resultList.length === len) callback(resultList);
}
if (len > 0) {
_.forEach(id, id => {
Inward.updateAll({id}, {
isActive: 0,
})
.then(updateResult);
});
} else {
callback(null, {
success: true,
msg: 'No records to update',
});
}
};
有了async/await,它会更短。
Inward.updateIsActiveDetails = async function(data) {
const results = [];
for(let i = 0; i < data.length; i++) {
results.push(await Inward.updateById(data[i].id));
}
return results;
}
这是我的最终有效答案。
基本上,updateAll 查询 运行 一次,它将 运行 作为内置查询
id: {
inq: _.map(data, 'id'),
}
因此,在 运行ning 之后,它将仅更新相应的行!很有意思。
Inward.updateIsActiveDetails = function (data, callback) {
Inward.updateAll({
id: {
inq: _.map(data, 'id'),
},
}, {
isActive: 0,
}, function (error, resultDetails) {
if (error) {
console.log('error', error);
callback(error);
} else {
console.log('resultDetails', resultDetails);
callback(null, resultDetails);
}
});
};
我在这里使用环回,同时使用数组中的对象列表进行更新调用。
我得到的回调已经调用了!
场景是,我在循环内部定义了回调,在第一个循环中,它实际上是调用了get in。
我在找
的路我应该更新查询中的所有对象列表 MySQL 计划调用。
Inward.updateIsActiveDetails = function(data, callback) {
var id = _.map(data, 'id');
if (id.length > 0) {
_.forEach(id, id => {
console.log('id....:', id)
Inward.updateAll({id}, {
isActive: 0,
}).then(updateresult => {
console.log(updateresult);
// callback(error); showing err with it... (callback already called)
}).catch(function(error) {
callback(error);
});
});
} else {
callback(null, {
success: true,
msg: 'No records to update',
});
}
};
输出:
id....: 3
id....: 4
{ count: 1 }
{ count: 1 }
感谢正确的解决方案
回调应该被调用一次,您是在循环中调用它,因此它会在循环的每次迭代中被调用。不止一次。如果出于某种原因您不能使用 async/await,则以下内容是正确的。
Inward.updateIsActiveDetails = function(data, callback) {
var id = _.map(data, 'id');
var len = id.length;
var resultList = [];
// When you call this function we add the results to our list
// If the list of updates is equal to the number of updates we had to perform, call the callback.
function updateResultList(updateResult) {
resultList.push(updateResult);
if (resultList.length === len) callback(resultList);
}
if (len > 0) {
_.forEach(id, id => {
Inward.updateAll({id}, {
isActive: 0,
})
.then(updateResult);
});
} else {
callback(null, {
success: true,
msg: 'No records to update',
});
}
};
有了async/await,它会更短。
Inward.updateIsActiveDetails = async function(data) {
const results = [];
for(let i = 0; i < data.length; i++) {
results.push(await Inward.updateById(data[i].id));
}
return results;
}
这是我的最终有效答案。
基本上,updateAll 查询 运行 一次,它将 运行 作为内置查询
id: {
inq: _.map(data, 'id'),
}
因此,在 运行ning 之后,它将仅更新相应的行!很有意思。
Inward.updateIsActiveDetails = function (data, callback) {
Inward.updateAll({
id: {
inq: _.map(data, 'id'),
},
}, {
isActive: 0,
}, function (error, resultDetails) {
if (error) {
console.log('error', error);
callback(error);
} else {
console.log('resultDetails', resultDetails);
callback(null, resultDetails);
}
});
};