【发布时间】:2017-05-04 13:28:54
【问题描述】:
我在 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 类型无效,但不会调用 then 或 catch 块。代码流跳转到 getData 函数的末尾,在 Node.js 系统的某个地方它生成了以下错误:
(node:11172) UnhandledPromiseRejectionWarning: UnhandledPromiseRejectionWarning: Unhandled Promise Rejection (rejection id: 3): TypeError: Cannot read property '0' of undefined`
Node.js 应用程序也没有崩溃,因此(这是一个 Web 应用程序)客户端保持打开的连接。
我是否正确使用了then/catch 模式,或者这可能是模块中的错误?
【问题讨论】:
-
您的
qs字符串未闭合。另外,您的callback函数是什么样的?您是否可能尝试迭代结果,即使调用时出错? -
我已经修正了帖子中的错字。我现在也更清楚这个问题并更新了问题。
-
如果没有更多信息,发生这种情况的唯一 (?) 方式是
catch处理程序中的callback(err)调用引发错误。您可以通过添加另一个catch来测试它。或者,您可以打开 devtools 的“停止未捕获的错误”复选框并在实际中捕获它。你能告诉我们callback代码吗?在then和catch处理程序的开头放置一些console.log语句。设置一些断点。单步执行代码。顺便说一句,您似乎以一种奇怪的方式混合了承诺和回调。 -
该错误似乎并非源自您问题中的代码。我假设
TypeError来自您的callback函数。没有看到该代码,我们只是在猜测 -
then块未被调用,因此回调未被调用。
标签: javascript node.js promise es6-promise