Promise.all并发

时间:2017-07-08 15:50:27

标签: node.js promise electron es6-promise nedb

我正在开发一个带有NeDB存储的电子应用程序(一个面向javascript文档的数据库,它使用类似Mongodb的API),但这段代码与Electron无关。

我正在尝试更新所有文档的extractions字段。此代码已简化,实际代码不会仅添加[1, 2, 3]。 问题是这段代码为db中的每个文档添加了一个具有相同_id的第二个文档,因此它就像绕过了唯一的_id约束。 您可以运行此代码,并查看具有相同值的多个_id

编辑 以便更好地查看问题,请先执行第1部分,然后对其进行评论并执行第2部分。您将看到2个具有相同_id的文档。一个使用extractions: [1, 2, 3],一个使用extractions: ["test1", "test2","test3"]

const Datastore = require('nedb');
let db = new Datastore({filename: "data2.db", autoload: true});


//---------PART 1------------
db.insert({_id: new Date('03/06/2017Z'), extractions: [1, 2, 3]}, function (err, newDoc) {
    if (err)
        console.log(err);
    else
        console.log(newDoc);
});



//---------PART 2------------    
/* db.find({})
    .sort({_id: -1})
    .exec(function (err, docs) {
        var promiseList = [];
        docs.forEach(function (doc) {
            promiseList.push(PromisifiedFindAndUpdate(doc._id))
        });
        Promise.all(promiseList).then(values => {
            console.log(values)
        });
    });
  */

 let PromisifiedFindAndUpdate = function (id) {
        return new Promise(function (resolve, reject) {
            db.findOne({_id: id}, function (err, doc) {
                let updated_extractions = ["test1", "test2","test3"];
                db.update({_id: id}, {$set: {"extractions": updated_extractions}}, {}, function (err, docs) {
                    if (err) {
                        return reject(err);
                    }
                    return resolve(docs);
                });
            });

        });
    };

0 个答案:

没有答案