相关疑难解决方法(0)

链式承诺不会传递拒绝

我有一个问题,理解为什么拒绝不通过承诺链传递,我希望有人能够帮助我理解为什么.对我而言,将功能附加到承诺链意味着我依赖于原始承诺的意图.这很难解释,所以让我先展示一下我的问题的代码示例.(注意:此示例使用Node和延迟节点模块.我使用Dojo 1.8.3进行了测试并得到了相同的结果)

var d = require("deferred");

var d1 = d();

var promise1 = d1.promise.then(
    function(wins) { console.log('promise1 resolved'); return wins;},
    function(err) { console.log('promise1 rejected'); return err;});
var promise2 = promise1.then(
    function(wins) { console.log('promise2 resolved'); return wins;},
    function(err) { console.log('promise2 rejected'); return err;});
var promise3 = promise2.then(
    function(wins) { console.log('promise3 resolved'); return wins;},
    function(err) { console.log('promise3 rejected'); return err;});
d1.reject(new Error());
Run Code Online (Sandbox Code Playgroud)

运行此操作的结果是此输出:

promise1 rejected
promise2 resolved
promise3 resolved
Run Code Online (Sandbox Code Playgroud)

好的,对我来说,这个结果没有意义.通过附加到这个承诺链,每个意味着它意味着它将取决于d1的成功解决和结果传递到链.如果promise1中的promise没有收到wins值,而是在其错误处理程序中得到一个错误的值,那么链中的下一个promise怎么可能调用其成功函数?它无法将有意义的值传递给下一个promise,因为它本身并没有获得值.

我可以用不同的方式描述我在想的是:有三个人,John,Ginger和Bob.约翰拥有一个小部件商店.姜进入他的商店,要求一袋各种颜色的小部件.他没有库存,所以他向他的经销商发送请求将他们运到他手中.与此同时,他给了Ginger一张雨检查,说他欠了她一袋小工具.Bob发现Ginger正在获取小部件并要求他在完成这些小部件后获得蓝色小部件.她同意并给了他一张纸条,说明她会.现在,约翰的经销商找不到他们的供应中的任何小部件,制造商也不再制作它们,所以他们告诉约翰,然后通知姜,她无法获得小部件.Bob怎么能在没有得到任何东西的情况下从Ginger获得蓝色小部件?

我在这个问题上的第三个更现实的观点是这个.假设我有两个我想要更新到数据库的值.一个是依赖于另一个的id,但是在我已经将它插入数据库并获得结果之前我无法获得id.最重要的是,第一个插入依赖于来自数据库的查询.数据库调用返回promises,我用它将两个调用链接成一个序列.

var promise = db.query({parent_id: value});
promise.then(function(query_result) {
    var first_value = …
Run Code Online (Sandbox Code Playgroud)

javascript dojo node.js promise deferred

32
推荐指数
1
解决办法
2万
查看次数

如何使用 nestjs 处理猫鼬错误

我按照https://docs.nestjs.com/techniques/mongodb 中的示例进行操作

问题是出现猫鼬验证错误时(例如,我有一个带有必填字段的架构,但未提供):

来自 games.service.ts:

  async create(createGameDto: CreateGameDto): Promise<IGame> {
    const createdGame = new this.gameModel(createGameDto);
    return await createdGame.save();
  }
Run Code Online (Sandbox Code Playgroud)

save() 函数返回一个 Promise。

现在我在 game.controller.ts 中有这个

  @Post()
  async create(@Body() createGameDto: CreateGameDto) {
    this.gamesService.create(createGameDto);
  }
Run Code Online (Sandbox Code Playgroud)

处理错误然后返回具有不同 http 状态和 json 文本的响应的最佳方法是什么?你通常会抛出一个HttpException但从哪里?如果我在承诺中使用 .catch() 处理错误,我就不能这样做。

(刚开始使用nestjs框架)

typescript nestjs

11
推荐指数
3
解决办法
1万
查看次数

标签 统计

deferred ×1

dojo ×1

javascript ×1

nestjs ×1

node.js ×1

promise ×1

typescript ×1