【问题标题】:Does this look typical for a call to a method that handles Sequelize?对于处理 Sequelize 的方法的调用,这看起来很典型吗?
【发布时间】: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 messageconnection 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


【解决方案1】:

您应该处理在Promise 中被拒绝的错误。调用 Promise 方法时使用trycatch

(async () => {
    try {
        var results2 = await contracts.update(contractToUpdate);
        console.log(results2);
    } catch (error) {
        console.log(error);
    }
})();

【讨论】:

  • 服务中无法推送try catch
  • 没有。由于您在“console.js”中调用 promise 方法,因此您必须在其中捕获错误
  • 我试过了... C:\code\eca-contracts>node console.js error has occurred. Executing (default): SELECT 1+1 AS result Connection has been established successfully. 这更好但是error message 是如何出现在消息Connection has been established successfully 之前的 === 如果这很难阅读,我在底部。
猜你喜欢
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 2011-06-26
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多