首页  >  文章  >  web前端  >  “.then(function(a){ return a; })”实际上为 Promise 做任何事情吗?

“.then(function(a){ return a; })”实际上为 Promise 做任何事情吗?

Barbara Streisand
Barbara Streisand原创
2024-11-10 14:58:03536浏览

Does

“.then(function(a){ return a; })”对 Promise 有影响吗?

在 Bookshelf 中使用 Bluebird Promise 时,开发人员经常会遇到这样的情况:采用类似于以下模式的模式:

var getEvents = function(participantId) {
  return new models.Participant()
    .query({where: {id: participantId}})
    .fetch({withRelated: ['events'], require: true})
    .then(function(model) {
      return model;
    });
};

但是,此代码对那些人提出了问题不熟悉承诺。 then 函数对代码的整体行为有任何有意义的影响吗?如果没有它,下面的实现能否达到相同的结果?

var getEvents = function(participantId) {
  return new models.Participant()
    .query({where: {id: participantId}})
    .fetch({withRelated: ['events'], require: true});
};

解开谜团

问题的关键在于传递给then的函数参数。该参数预计会收到链中前一个 Promise 的返回值。因此,看来 return a; then 函数中的语句本质上是一个无操作,因为它只是不改变地传递接收到的参数。

为什么保留 Then()?

尽管它有明显的冗余,但 then 函数还是有用的某些用例中的目的。一个例子是,当返回的 Promise 需要在整个链中进行不同的处理时。例如,它可以被记录、转换为 JSON 或以自定义方式处理。另一个优点是 then 函数允许错误处理,尽管这也可以通过 did 来实现,具体取决于所使用的 Promise 库。

最佳实践

一般来说,建议只当真正需要时再使用。不必要的 then 函数会给代码库增加不必要的复杂性并增加出错的可能性。作为一般经验法则,仅当返回的 Promise 的结果或错误需要显式修改或处理时才合并 then。

以上是“.then(function(a){ return a; })”实际上为 Promise 做任何事情吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn