【发布时间】:2017-04-26 15:02:10
【问题描述】:
我正在阅读this tutorial about Bookshelf。 Bookshelf 使用 Bluebird 承诺。有很多类似这样的例子:
var getEvents = function(participantId) {
return new models.Participant()
.query({where: {id: participantId}})
.fetch({withRelated: ['events'], require: true})
.then(function(model) {
return model;
});
};
我仍然对 Promise 感到不舒服,但从我目前所了解到的情况来看,这似乎很奇怪。我的问题是,上述函数是否与直接返回fetch() 并省略最终的then() 完全相同:
var getEvents = function(participantId) {
return new models.Participant()
.query({where: {id: participantId}})
.fetch({withRelated: ['events'], require: true});
};
也就是说,它仍然做同样的事情,返回同样的promise,可以用同样的方式调用等等?
据我了解,传递给then的函数的参数获取的是链中前一个promise的返回值。所以,在我看来,.then(function (a) { return a; }) 通常只是一个空操作。对吧?
如果它们不一样,有什么区别?这是怎么回事,为什么作者要这样写?
【问题讨论】:
-
.then(function(model) { return model; });没用,可以(并且应该)被删除。 -
如果
fetch处理程序可以提供一些参数,这是有意义的。在此之后 - 承诺将只解决一个。 -
作者最后添加了
then,以表明在此步骤中您可以操作model -
额外
.then()的一个常见原因是您可以在那里记录结果或在其上设置断点以检查它。这可能应该在一般发布之前被删除,但这有时就是它存在的原因。或者,作者认为他们可能想要在返回结果之前稍微处理一下结果,然后最终没有这样做。或者这只是为了教育目的,以更好地说明返回结果。
标签: javascript node.js promise bluebird