既没有也没有捕获

时间:2017-05-04 04:37:58

标签: javascript node.js promise es6-promise

我在Node.js中使用mssql模块。

我有以下date是smalldatetime的列:

function getData(date, callback) {
  var qs = "select * from T1 where date='2017-04-31'";
  new sql.Request().query(qs).then(function (result) {
        return callback(null, result);
      }).catch(function (err) {
        return callback(err);
      });
}

date过滤器中给出的值对于smalldatetime类型无效,但不会调用thencatch块。代码流跳转到getData函数的末尾,并在Node.js系统的某个位置生成以下错误:

  

(node:11172)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:3):TypeError:无法读取属性' 0' of undefined`

Node.js应用程序也没有崩溃,因此(这是一个Web应用程序)客户端保持打开的连接。

我是否正确使用then / catch模式,或者这可能是模块中的错误?

1 个答案:

答案 0 :(得分:0)

查看文档(假设您使用https://github.com/patriksimek/node-mssql)...

sql.connect(config).then(function() {
    return sql.query('select * from mytable where id = ${value}')
}).then(result => {
    console.dir(result)
}).catch(err => {
    // ... error checks
})

所以,承诺似乎比你使用它的地方高一级(而不是query)。

要使用回调,看起来就是这样:

new sql.Request().query(qs, callback)

从我正在阅读的内容来看,.query上的承诺只发生在INSERT,UPDATE或DELETE