Javascript 意外吞下Sequelize中的NOTNULL约束(可能是bluebird中的错误处理)

Javascript 意外吞下Sequelize中的NOTNULL约束(可能是bluebird中的错误处理),javascript,node.js,promise,sequelize.js,bluebird,Javascript,Node.js,Promise,Sequelize.js,Bluebird,(注意:可能是一个愚蠢的初学者问题) 我不熟悉JS中的续集和承诺——在测试一些代码的过程中,我希望抛出一个错误,但我看到的是一个无声的失败 以下是相关代码(这是使用express作为web服务器,并在磁盘上使用sqllite后端) 当我访问该端点时,我希望看到Sequelize在违反数据库约束时抛出的任何错误。相反,我看到的是“added user”。然而,当我查看数据库时,正如预期的那样,我的all null行并没有出现 很明显,我无意中接受了这个错误。几乎可以肯定,因为我不明白承诺中的错误处

(注意:可能是一个愚蠢的初学者问题)

我不熟悉JS中的续集和承诺——在测试一些代码的过程中,我希望抛出一个错误,但我看到的是一个无声的失败

以下是相关代码(这是使用express作为web服务器,并在磁盘上使用sqllite后端)

当我访问该端点时,我希望看到Sequelize在违反数据库约束时抛出的任何错误。相反,我看到的是“added user”。然而,当我查看数据库时,正如预期的那样,我的all null行并没有出现

很明显,我无意中接受了这个错误。几乎可以肯定,因为我不明白承诺中的错误处理是如何发生的。我本以为对addUser的调用会抛出,因此promise机制不会在
then()
中调用处理程序,而是在
catch()
中调用处理程序。。。但显然这是不正确的?

在设置承诺时会立即调用
res.send()
函数,将
res.send()
的返回值作为参数传递给
。然后()

.then
参数应该是一个函数,这样它可以在承诺解析后运行

function testBlowUpAdd(req, res){
  addUser(null, null, null)
    .then(user => res.send("added user"))
    .catch(e => res.send(e.toString()));
}

.catch(e=>res.send(e.toString())
并不是意外地吞下了错误,它看起来是故意的……而且
testBlowUpAdd
没有返回任何东西,这是故意的吗?你在什么地方收到了关于已经发送的头的警告吗?哦,谢谢。事实上我完全误解了
then()的语义
。哇!
function testBlowUpAdd(req, res){
  addUser(null, null, null)
    .then(user => res.send("added user"))
    .catch(e => res.send(e.toString()));
}