【问题标题】:Async write after select Pouchdb选择 Pouchdb 后异步写入
【发布时间】:2017-04-28 20:58:10
【问题描述】:

我正在尝试在将元素插入我的 bdd 之前检查它是否存在。 我必须这样做才能(将来)修改这个现有元素。

我在 Node 6.9.1 中使用 PouchDb 和 PouchDb-find。

其实我是这样做的:

for(var i = 0; i < 10;i++ ){
    (function(_count, _pdb){
      var count = _count;
      var db = _pdb;
      db.find({
        selector: {numeroCandidat: parseInt(results[count].no_apb)}
      }).then((result) => {
        if(result.docs.length != 0){
          console.log("l'étudiant existe");
        }else{
          console.log("l'étudiant n'existe pas");

          var etudiant = {
            "numeroCandidat": results[count].no_apb,
            "nom": results[count].nom,
            "numeroGroupe": "gr" + results[count].groupe,
            "filiere": results[count].libelle,
          };

          db.post(etudiant).then((response) =>{
            // handle response
            console.log("STUDENT CREATED");
          }).catch(function (err) {
            console.log(err);
          });
        }
      }).catch(function (err) {
      });
    })(i, this.pdb);
  };

但问题是:由于我的选择查询的异步版本......如果一个元素存在两次,它会附加第二次选择发生在插入第一个元素之前,我在我的数据库。我不知道如何处理这个问题。

【问题讨论】:

    标签: javascript node.js database asynchronous pouchdb


    【解决方案1】:

    SO.. 我找到了解决方法! 只需创建一个我在写入数据库后递归调用的函数。 再见 for 循环。

    var createStudents = function(_count, _pdb, _students){
        if(_count >= 10) return;
        console.log(_count);
        var count = _count;
        var db = _pdb;
        var students = _students.slice(0);
        db.find({
          selector: {numeroCandidat: parseInt(students[count].no_apb)}
        }).then((result) => {
          if(result.docs.length != 0){
            console.log("l'étudiant existe");
            createStudents(++count,db,results);
          }else{
            var etudiant = {
              "numeroCandidat": students[count].no_apb,
              "nom": students[count].nom,
              "numeroGroupe": "gr" + students[count].groupe,
              "filiere": students[count].libelle,
              "etudiantComms": [
                {"commentaire": students[count].commentaire}
              ]
            };
            db.post(etudiant).then((response) =>{
              // handle response
              console.log("STUDENT CREATED");
              createStudents(++count,db,results);
            }).catch(function (err) {
              console.log(err);
            });
          }
        }).catch(function (err) {
        });
      }
    
      createStudents(0,this.pdb,results);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2020-04-03
      • 2017-06-07
      相关资源
      最近更新 更多