当前位置: 首页 > 面试题库 >

“ .then(function(a){return a;})”对诺言是否无效?

张瀚漠
2023-03-14
问题内容

使用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; }),总的来说,这只是一个禁忌。对?

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


问题答案:

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

是。1个

它是无用的,应该省略。

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

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

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

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



 类似资料:
  • 问题内容: 我正在阅读有关Bookshelf的教程。书架使用Bluebird的承诺。有很多例子看起来像这样: 我仍然对诺言不满意,但是从到目前为止的经验来看,这似乎很奇怪。我的问题是,上面的函数与直接返回并省略最终函数完全相同: 也就是说,它仍然做同样的事情,返回相同的承诺,可以用相同的方式调用,等等? 据我了解,传递给函数的参数将获取链中先前promise的返回值。因此,在我看来,总的来说,这只

  • 通过使用'defn'宏来定义函数。 以下是函数定义的一般语法。 语法 (Syntax) (defn functionname “optional documentation string” [arguments] (code block)) 函数可以有文档字符串,这很好地描述了函数实际执行的操作。 例子 (Example) 以下是一个函数的简单示例。 (ns clojure.e

  • 必须调用函数才能执行它。 此过程称为function invocation 。 语法 (Syntax) function_name() 以下示例说明了如何调用函数 - void main() { test(); } test() { //function definition print("function called"); } 它将产生以下output -

  • 函数定义指定特定任务的执行方式和方式。 在使用函数之前,必须先定义它。 定义标准函数的语法如下 - function_name() { //statements } OR void function_name() { //statements } void关键字表示该函数不向调用者返回任何值。 示例 - 简单函数定义 test() { //functio

  • 问题内容: 有时我看到: 有时我看到: 两种形式之间有区别吗?是否有令人信服的理由使用一种形式而不是另一种形式? 问题答案: 这两种形式没有实际的区别,但是从_语法的_角度来看,两者之间的区别是第一个示例a中将包含分组运算符(括号),其中包括: 在第二个示例中,我们首先拥有一个整数,其中包含:

  • 问题内容: 我已经将我的代码重组为promises,并建立了一个精彩的长期承诺链,其中包含多个.then()回调。最后,我想返回一些复合值,并且需要访问多个中间promise结果。但是,序列中间的分辨率值不在上次回调的范围内,如何访问它们? 问题答案: 当然,语言设计者也意识到了这个问题。他们做了很多工作,异步函数提案最终使它成为了 ECMAScript 8 您不再需要单个调用或回调函数,因为在异