Как обновить несколько объектов в loopback? - PullRequest
0 голосов
/ 12 января 2019

Может кто-нибудь помочь мне обновить несколько объектов в замыкание на себя, но я понятия не имею, как это сделать ..

это то, что я пытался ...

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);
            }
        });
    }
};

это правильно?

1 Ответ

0 голосов
/ 12 января 2019

Вы можете запустить это, но из-за асинхронной природы 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
        }
    }
    };
...