Node.js 如何更新环回中的多个对象?

Node.js 如何更新环回中的多个对象?,node.js,for-loop,loopbackjs,update-attributes,Node.js,For Loop,Loopbackjs,Update Attributes,有人能帮我更新一些多个对象吗 环回,但我不知道怎么做 这就是我试过的 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.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);
            }
        });
    }
};
Bond.ParseBondQoutesheet=(数据,cb)=>{//eslint禁用行
////现在更新多个
for(设i=0;i{
如果(!err){
updateAttributes(数据[i],函数(err,updated){
如果(!err){
如果(data.length==i){
console.log('updated success')
cb(空,更新);
}
}否则{
console.log('err')
console.log(错误)
cb(err,null);
}
})
}否则{
cb(err,null);
}
});
}
};

这是正确的吗?

您可以运行它,但由于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
        }
    }
    };
Bond.ParseBondQoutesheet=(数据,cb)=>{//eslint禁用行
////现在更新多个
让数据=数据;
updateAllSync(0);
函数updateAllSync(i){
if(i<数据长度){
常数过滤器={
其中:{id:data[i].id},
};
Bond.findOne(过滤器,(err,newdata)=>{
如果(!err){
updateAttributes(数据[i],函数(err,updated){
如果(!err){
如果(data.length==i){
console.log('updated success')
更新同步(i+1);
}
}否则{
console.log('err')
console.log(错误)
cb(err,null);
}
})
}否则{
cb(err,null);
}
});
}否则{
cb(null,i);//已完成更新所有同步文档
}
}
};

您需要使此进程同步运行,否则会出现意外行为。。使用我提供的代码,你应该会很好…哇,太好了,谢谢!,但这是在环回中更新多个对象的正确方法吗?对不起,我是这里的新手。既然你需要用这种同步方式,这就是方法。因为这个过程需要一个接一个地运行。有一个名为updateMany()的方法,但考虑到您的情况,这只是另一个故事。如果你觉得这个答案很有帮助,请将它标记为答案。你可以在这里阅读,但不能在这里使用。因为您的执行需要从数据库中检索数据并进行更新。使用updateMany()时-它将只更新与相同条件匹配的所有文档