javascript与mysql的变革

js4nwp54  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(250)

所以我对一个承诺有点困难,我想不出来。代码很长,但我要把它简化一点。
基本的问题是,getdataset1andposttomysql获取一些数据并将值更新到mysql中,之后,我希望getdataandperformaction从mysql获取一些数据,执行一些操作,然后将一些字段更新到mysql中,然后,我想关闭连接。
如果我只执行getdataset1andposttomysql并编写一个.then()来关闭连接,那么一切都会像一个符咒一样工作。
问题是,当我将第二个promise函数添加到第一个时,它就不起作用了。
有什么想法吗?
谢谢!!!

function getDataSet1AndPostToMysql(param){
return new Promise((resolve, reject) => {
   //perform some actions with data        
  var sql = "UPDATE urls SET value=1 WHERE data='" + valueX + "'";
  connection.query(sql, function (err, result) {
      if (err) throw err;
  })

   resolve();
   })
}

function getDataAndPerformAction{
    return new Promise ((resolve,reject) => {
    //Get data back from mysql
    //Do things with data      
    var sql = "UPDATE urls SET depth="+depth+1+" WHERE url='" + url + "'";
    connection.query(sql, function (err, result) {
        if (err) throw err;
        console.log("update done")
    })

        resolve();
    })

}

getDataSet1AndPostToMysql.then(()=>{
  getDataAndPerformAction()
  }).then(()=>{
  connection.end()
  })
t1qtbnec

t1qtbnec1#

你需要回报我的承诺 getDataAndPerformActionthen 否则 then 只返回未定义,然后返回下一个 then 没有什么可等的。

getDataSet1AndPostToMysql.then(()=>{
    return getDataAndPerformAction() // return this
}).then(()=>{
    connection.end()
})

不使用大括号可以简化:

getDataSet1AndPostToMysql.then(()=> getDataAndPerformAction()) // this implicitly returns
.then(()=> connection.end())
cbjzeqam

cbjzeqam2#

您需要将result和err传递给promise,并处理出现错误的情况。

function getDataSet1AndPostToMysql(param){
    return new Promise((resolve, reject) => {
        //perform some actions with data        
        var sql = "UPDATE urls SET value=1 WHERE data='" + valueX + "'";
        connection.query(sql, function (err, result) {
            if (err) resolve(err);
            resolve(result);
        });
    });
}
function getDataAndPerformAction() {
    return new Promise ((resolve,reject) => {
        var sql = "UPDATE urls SET depth="+depth+1+" WHERE url='" + url + "'";
        connection.query(sql, function (err, result) {
            if (err) reject(err);
            resolve(result);
        });
    });
}

function cleanup(connection) {
    connection.end();
}
var boundCleanup = cleanup.bind(connection);
getDataSet1AndPostToMysql.then(getDataAndPerformAction)
    .then(boundCleanup, boundCleanup);

相关问题