无法理解koa和nodejs中的承诺的回报

时间:2018-06-07 16:48:21

标签: mysql node.js koa

mysql.js档案中的代码

let query = function( sql, values ) {
return new Promise(( resolve, reject ) => {
    pool.getConnection(function(err, connection) {
        if (err) {
            reject( err )
        } else {
            connection.query(sql, values, ( err, rows) => {
                if ( err ) {
                    reject( err )
                } else {
                    resolve( rows )
                }
                connection.release()
            })
        }
    })
  })
}

let optUser = function (value) {
  let _sql = "sql command"
  return query(_sql, value)
}

电话代码如下

let result = mysqlModel.optUser([s,d]).then()

此处result为空或不为空,我不明白这一点,这是我的问题

  1. 如果我使用select命令,例如let _sql = "select * from table where key1=? and key2=?",如果result为空,则表示没有记录,如果result不为空,它会返回相应的用户数据,对不对?

  2. updatedeleteinsert的回报是什么?

  3. 非常感谢。

2 个答案:

答案 0 :(得分:1)

  1. 是的,如果查询没有返回任何内容,您将获得null,如果有,则会提供data
  2. 要进行更新,删除,插入,您将获得json,其中包含changedRowsaffectedRows等特定键。 A'插入'查询将为您提供该行的insertId。基本上,您将确认您的操作已成功执行。
  3. connection.query(sql, values, ( err, results, fields) => { if ( err ) { reject( err ) } else { resolve( rows ) } connection.release() })

答案 1 :(得分:0)

let result = mysqlModel.optUser([s,d]).then()不会将正确的数据设置为结果变量。它只会返回一个未决的承诺。只有在解决了承诺后才能收到数据。致电承诺的正确方法是:

mysqlModel.optUser([s, d])
.then(function (data) {
    // Your data will be present here. You can check for null here.
    console.log(data);
})
.catch(function (err) {
    // This is called if the query encounters some error. 
    console.log(err);
});

您可以阅读有关承诺here

的更多信息