gpt4 book ai didi

node.js - Nodejs promise 捕获 "hell"然后使用 sequelize orm

转载 作者:行者123 更新时间:2023-12-03 22:24:09 24 4
gpt4 key购买 nike

目前我使用流行的 sequelize orm 和 typesciprt 为 nodejs 开发 web 应用程序。这是我的代码中的一个示例

this.createNewGame(player.idPlayer).then((game) => {

this.getBestScore(player.idPlayer).then((bestScore) => {
defer.resolve({
idGame: game.idGame,
bestScore: bestScore
});
}).catch((error) => { defer.reject(error); });

}).catch((error) => { defer.reject(error); });

这是其中一种方法
private getBestScore(idPlayer: number): Q.Promise<number> {
var defer = this.q.defer<number>();

GameModel.max<number>('score', { where: { 'idPlayer': idPlayer } }).then((result) => {
defer.resolve(result);
}).catch((error) => { defer.reject(error); });

return defer.promise;
}

我在每个方法实现和每个方法调用中都使用 catch。我想在我的 expressjs 路由器中只有一个 catch 块。我试过这样的代码,它工作得很好,这里是例子:
//code in GameService class ...
getData(): Q.Promise<number> {
var defer = this.q.defer<number>();

this.method1().then((result) => {
defer.resolve(result);
});

return defer.promise;
}

private method1(): Q.Promise<number> {
var defer = this.q.defer<number>();

throw 'some error occurs here';

return defer.promise;
}

//router call GameService
router.get('/error-test', (req: express.Request, res: express.Response) => {

gameService.getData().then((result) => {
res.json(result);
}).catch((error) => { res.send(error); });
//works fine, here I get my thrown error

});

但是在我之前的示例中,我需要在任何地方使用 catch 块,否则如果我得到未处理的拒绝 SequelizeDatabaseError 或任何其他未处理的拒绝,nodejs 将停止工作。为什么在使用 sequalize 调用 db 时,我的 expressjs 路由器中不能只使用一个 catch 块,就像在我的第一个示例中一样?

最佳答案

Sequelize 操作会返回 promise,因此没有理由将 Q 混入其中。这是等价的

private getBestScore(idPlayer: number): Q.Promise<number> {
return GameModel.max<number>('score', { where: { 'idPlayer': idPlayer } });
}

它不返回 Q.Promise(sequelize 使用 bluebird),但实现应该是可互操作的,因为它们都是“thenables”。

关于node.js - Nodejs promise 捕获 "hell"然后使用 sequelize orm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32284496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com