您好,新手,有人可以帮我更新一些 环回,但我对如何执行此操作一无所知。
这就是我尝试过的...
Bond.ParseBondQoutesheet = (data, cb) => { //eslint-disable-line
//// now update multiple
for (let i = 0; i <= data.length; i = +i) {
const filter = {
where: { id: data[i].id },
};
Bond.findOne(filter, (err, newdata) => {
if (!err) {
newdata.updateAttributes(data[i], function (err, updated) {
if (!err) {
if (data.length === i) {
console.log('updated success')
cb(null, updated);
}
} else {
console.log('err')
console.log(err)
cb(err, null);
}
})
} else {
cb(err, null);
}
});
}
};
这正确吗?
答案 0 :(得分:1)
您可以运行它,但是由于JavaScript的异步特性,它的行为会异常 为了解决这个问题,您可以做的就是使用这样的递归方法
Bond.ParseBondQoutesheet = (data, cb) => { //eslint-disable-line
//// now update multiple
let data = data;
updateAllSync(0);
function updateAllSync(i) {
if (i < data.length) {
const filter = {
where: { id: data[i].id },
};
Bond.findOne(filter, (err, newdata) => {
if (!err) {
newdata.updateAttributes(data[i], function (err, updated) {
if (!err) {
if (data.length === i) {
console.log('updated success')
updateAllSync(i+1);
}
} else {
console.log('err')
console.log(err)
cb(err, null);
}
})
} else {
cb(err, null);
}
});
}else{
cb(null,i); // finished updating all docs sync
}
}
};