【发布时间】:2018-06-22 03:22:33
【问题描述】:
当我使用有效的AccountNo_Lender 运行它时,数据库更新正常。如果我如上所示通过 null ,我希望看到单行错误error has occurred 但我在块引用中得到了下面显示的内容。这里可能会发生什么?
console.js
const contracts = require('./service');
let contractToUpdate = {
idContract: 102,
AccountNo_Lender: null
};
(async () => {
var results2 = await contracts.update(contractToUpdate);
console.log(results2);
})();
service.js
require('dotenv/config');
const Sequelize = require('sequelize');
const sequelize = new Sequelize(process.env.DATABASE, process.env.USER, process.env.PASSWORD, {
host: process.env.HOST,
dialect: 'mysql',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
}, {
define: {
timestamps: false,
freezeTableName: true
}
});
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
/**
* Model for the contract entity.
*/
const Contract = sequelize.define('Contract', {
idContract: {
type: Sequelize.INTEGER,
primaryKey: true
},
AccountNo_Lender: {
type: Sequelize.STRING,
allowNull: false
}
});
exports.update = function (contract) {
return new Promise(function (resolve, reject) {
Contract.insertOrUpdate(contract)
.then(c => {
resolve(c);
}).catch(err => {
reject('error has occurred.');
});
});
};
被拒绝的承诺
C:\code\mypgm>node console.js (node:23304) UnhandledPromiseRejectionWarning:未处理的承诺拒绝 (rejection id: 1): 发生错误。 (节点:23304)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的 Node.js 进程。执行(默认):SELECT 1+1 AS 结果 连接建立成功。
更新:
如果我像下面建议的那样在调用者周围放置一个 try/catch,我会得到更好的结果,但不确定 error message 在 connection message 之前是如何发生的?
C:\code\eca-contracts>node console.js
error has occurred.
Executing (default): SELECT 1+1 AS result
Connection has been established successfully.
【问题讨论】:
-
这对我来说是正确的。你会得到一个
warning,表示尚未处理被拒绝的承诺。你期待什么?这不是错误 -
我期待看到
error has occurred。它说promise has not been handled我该如何处理?它还说Unhandled promise rejections are deprecated -
这是因为您不能处理
new Promise(function (resolve, reject) {的承诺拒绝。你需要抓住这个承诺。您也可以resolve承诺而不是reject并在您调用update函数的地方处理它
标签: node.js sequelize.js