我正在阅读有关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():
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; }),总的来说,这只是一个禁忌。对?
then
.then(function (a) { return a; })
如果它们不相同,有什么区别?这是怎么回事,为什么作者这么写呢?
在我看来,这.then(function (a) { return a; })只是一个禁忌。对?
它是无用的,应该省略。
这是怎么回事,为什么作者这么写呢?
这是一个错误。否则作者不了解诺言。
1:如果不一样,有什么区别?
与往常一样,有一些极端情况。真的很奇怪。没有人应该使用(无需大量评论): a)它返回一个新的Promise实例,一个独特的对象,以避免共享。但是,.then()也是如此。 b)a再次测试其适用性。如果自实现以来突然变成了诺言,现在将等待它。这当然是可怕的。
.then()
a