当前位置: 首页 > 知识库问答 >
问题:

返回值或Promise.resolve有什么区别()

柴霖
2023-03-14

以下两者之间的区别是什么:

new Promise(function(res, rej) {
    res("aaa");
  })
  .then(function(result) {
    return "bbb";
  })
  .then(function(result) {
    console.log(result);
  });

这是:

new Promise(function(res, rej) {
    res("aaa");
  })
  .then(function(result) {
    return Promise.resolve("bbb");
  })
  .then(function(result) {
    console.log(result);
  });

我问,因为我得到不同的行为使用Angular和$超文本传输协议服务与链接。代码有点太多,因此首先是上面的例子。

共有3个答案

令狐辉
2023-03-14

您的两个示例的行为应该大致相同。

然后()处理程序中返回的值将成为从该然后()返回的promise的解析值。如果内返回的值是一个promise,那么由返回的promise()将采用该promise的状态,并像返回的promise一样解决/拒绝。

在第一个示例中,在第一个然后()处理程序中返回"bbb",因此"bbb"被传递到下一个然后()处理程序中。

在第二个示例中,返回一个立即用值"bbb"解析的promise,因此"bbb"被传递到下一个然后()处理程序。(这里的Promise.resolve()是无关的)。

结果是一样的。

如果你能给我们展示一个实际表现出不同行为的例子,我们可以告诉你为什么会发生这种情况。

杨昆
2023-03-14

规则是,如果中的函数返回一个值,那么处理程序将用该值解析/拒绝promise,如果函数返回一个promise,那么下一个子句将是然后函数返回的promise的子句,所以,在这种情况下,第一个例子落入然后的正常序列,并打印出人们可能期望的值,在第二个例子中,当你做的Promise.resolve("bbb")'s然后是在链接时被调用的然后(出于所有意图和目的)。它实际工作的方式将在下面更详细地描述。

引用promise/A规范:

promise解析过程是一个抽象操作,将promise和值作为输入,我们将其表示为[[Resolve]](promise,x)。如果x是一个thable,它试图使promise采用x的状态,假设x的行为至少有点像promise。否则,它将使用值x来实现promise。

这种对表的处理允许promise实现进行互操作,只要它们公开符合Promises/a的then方法。它还允许Promises/A实现使用合理的方法“同化”不一致的实现。

这里要注意的关键是这一行:

如果x是promise,则采用其状态[3.4]

链接:https://promisesaplus.com/#point-49

洪和风
2023-03-14

简单来说,在然后处理程序函数中:

A) 当x是一个值(数字、字符串等)时:

  1. return x相当于退货promise。解析(x)
  2. throw x相当于退货promise。拒绝(x)

B) 当x是已结算的promise(不再待定)时:

  1. return x相当于return Promise.resolve(x),前提是promise已经解决。

C) 当x是待定的promise时:

  1. 返回x将返回一个挂起的promise,并将在随后的上对其进行评估,然后

阅读有关Promise.prototype.then()文档的更多信息。

 类似资料:
  • 我刚开始学习javafx来构建桌面应用程序。但有一件事我不明白。我的问题是:我们可以通过编写代码来创建gui,如下所示: 或者,我们可以用场景构建器创建gui,如下所示: 如果第二种方法可用,我们为什么要使用编写代码,比如在哪里放置这个标签或按钮或其他什么。?

  • 我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序) 在客户端我用vue cookie设置cookie 在服务器端,我使用CookieParser 所以,在应用程序。我有这样的代码 并且,在文件中,我有这样一个GET请求的代码 问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie 添加

  • 问题内容: Go具有非常整洁的多个返回值范例。但是它看起来和使用具有相同符号的不同机制。这是一个简单的示例: 在上面的示例中,给出错误为返回两个值,而和-两个表达式都正常工作而没有任何错误。为什么会有不同的行为? 问题答案: 在地图,数组或切片上使用内建的获取,并且还允许一个 或 两个变量。用户定义的函数和方法不是这种情况。如果一个函数声明了两个返回值,则必须告诉他们如何处理这两个返回值,或者忽略

  • (免责声明:人们通过facebook、firebase等请求询问使用异步操作时数据为空/不正确时,会产生很多问题。我提出这个问题的目的是为每个从android异步操作开始的人提供一个简单的答案。) 我试图从我的一个操作中获取数据,当我使用断点或日志调试它时,值就在那里,但当我运行它时,它们总是空的,我该如何解决这个问题呢? 火力基地 脸书 等。

  • 我不知道该用什么。我有两页——简介。jsp(1)和booksList.jsp(2)。对于每个页面,我都创建了一个控制器类。第一页有打开第二页的按钮: 第一个问题是:我不确定这个按钮的正确性。它工作得很好,但是按下这个按钮后我有问号。 第二个问题是:当我按下该按钮时,调用带有下一个注释的方法(第二页的控制器): 我应该用这种方法返回什么?换句话说,我怎么能从第一页跳到第二页? < li> < li>

  • 问题内容: 我是一名编程初学者,对函数的返回值有疑问。 我正在学习Java。 我已经附上了我的书中具有经典选择排序功能的代码。 现在显然来自本书的代码可以正常工作。但是,主要功能中的以下三行是我的问题的基础: int [] a = new int [] {1,9,2,8,3,7,4,6​​,5}; 排序(a); if(ascending(a))System.out.println(“ Works”