一尘不染

“ .then(function(a){return a;})”是对承诺的否定操作吗?

node.js

我正在阅读有关Bookshelf的教程。书架使用Bluebird的承诺。有很多例子看起来像这样:

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

我仍然对诺言不满意,但是从到目前为止的经验来看,这似乎很奇怪。我的问题是,上面的函数与fetch()直接返回并省略最终函数完全相同then()

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

也就是说,它仍然做同样的事情,返回相同的承诺,可以用相同的方式调用,等等?

据我了解,传递给函数的参数将then获取链中先前promise的返回值。因此,在我看来.then(function (a) { return a; }),总的来说,这只是一个禁忌。对?

如果它们不相同,有什么区别?这是怎么回事,为什么作者这么写呢?


阅读 220

收藏
2020-07-07

共1个答案

一尘不染

在我看来,这.then(function (a) { return a; })只是一个禁忌。对?

是。1个

它是无用的,应该省略。

这是怎么回事,为什么作者这么写呢?

这是一个错误。否则作者不了解诺言。

1:如果不一样,有什么区别?

与往常一样,有一些极端情况。真的很奇怪。没有人应该使用(无需大量评论):
a)它返回一个新的Promise实例,一个独特的对象,以避免共享。但是,.then()也是如此。
b)a再次测试其适用性。如果自实现以来突然变成了诺言,现在将等待它。这当然是可怕的。

2020-07-07