即使使用了promise,查询也不会按顺序运行

时间:2019-01-11 11:25:28

标签: node.js promise

因此,我想按以下顺序运行所有这些sql查询:

 db.query("DROP TABLE if exists `wlb`.`library`, `wlb`.`tag_instance`, `wlb`.`tags`, `wlb`.`users`, `wlb`.`vote_library`, `wlb`.`vote_table`")
  .then(db.query(Users).then(csv.parseCSV("users")
    .then(db.query(Library).then(csv.parseCSV("Library")
      .then(db.query(Tags).then(csv.parseCSV("tags")
        .then(db.query(Tag_instance).then(csv.parseCSV("Tag_instance")
          .then(db.query(Vote_table).then(csv.parseCSV("Vote_table") 
            .then(db.query(Vote_library).then(csv.parseCSV("Vote_library")
 )))))))))))).catch("Error");

db.query函数如下:

var query = function (query,callback) {
  return new Promise(function (resolve, reject) {
    conn.db.query(query, function(error, result) {
      if(error){
        reject(new Error("Error occurred while making query" + error));
      } else{
        console.log("Query Executed");
        resolve(result);
      }
    })
  });
}

parseCSV函数如下:

var parseCSV = (name) => {
  return new Promise(function (resolve, reject) {
    filePath = __dirname + `/../../Data/${name}.csv`;
    fs.readFile(filePath, {
      encoding: 'utf-8'
    }, function (err, csvData) {
       if (err) {
         console.log(err);
       }
       csvParser(csvData, {
         delimiter: ',',
         cast: true
       }, function (err, data) {
         if (err) {
           console.log(err);
         } else {
           var sql="INSERT INTO `wlb`."+`${name}`+ " VALUES ?";
           data.splice(0,1);
           conn.db.query(sql, [data], function(err) {
           if (err){conn.db.end();
              console.log(name);
              throw err;
           }
           console.log(`${name} Inserted `);
         })
      }});
   });
 });
}

这里的问题是,即使我使用了Promise,查询也没有按所述顺序进行。首先,所有db.query Promise都在运行,然后完成所有CSV解析。

2 个答案:

答案 0 :(得分:0)

您不是在parse函数中调用“解决”或“拒绝”。

答案 1 :(得分:0)

parseCSV中的承诺未得到解决/拒绝:

var parseCSV = (name) => {
  return new Promise(function (resolve, reject) {
    filePath = __dirname + `/../../Data/${name}.csv`;
    fs.readFile(filePath, {
      encoding: 'utf-8'
    }, function (err, csvData) {
       if (err) {
         console.log(err);
         reject(err)                   // here
       }
       csvParser(csvData, {
         delimiter: ',',
         cast: true
       }, function (err, data) {
         if (err) {
           console.log(err);
           reject(err)                   // here
         } else {
           var sql="INSERT INTO `wlb`."+`${name}`+ " VALUES ?";
           data.splice(0,1);
           conn.db.query(sql, [data], function(err) {
           if (err){conn.db.end();
              console.log(name);
              reject(err)                   // here
           }
           console.log(`${name} Inserted `);
           resolve()                        // here
         })
      }});
   });
 });
}

另外,请看一下async / await以使此代码更具可读性。