【问题标题】:Return inside another function which itself is getting returned在另一个函数中返回,该函数本身正在返回
【发布时间】:2017-12-30 21:59:42
【问题描述】:
function getFirstUser() {
    return getUsers().then(function(users) {
               return users[0].name;
           });
}

大家好,我正在自学 js,在阅读有关 Promise 的文章时,我遇到了这个函数。我不明白为什么在第二次退货时需要第一次退货。提前问好

【问题讨论】:

  • 这不是一个格式正确的问题。请考虑阅读this。对于您的具体问题,您需要了解回调函数。看看this SO question
  • @ramrunner - 这个问题可以再解释一下,但我理解得很好并写了一个详细的答案。
  • @jfriend00 我知道,我没有投反对票。只是建议 OP 对其进行编辑以使其更符合网站标准。
  • @ramrunner 下次会记住并感谢大家

标签: javascript promise


【解决方案1】:

首先,第一个返回是从您的getFirstUser() 函数返回getUsers().then() 的结果。所以,getFirstUser() 的返回值是一个承诺。

第二个返回是从.then() promise 回调返回一个值。在 Promise 的世界中,从 .then() 处理程序返回一个值会将这个 Promise 的解析值设置为该值。

第二次返回不是从getFirstUser() 函数返回。它仅从 .then() 回调函数返回,并且该返回值返回到调用 .then() 处理程序的承诺基础结构中。

在时间方面,了解时间轴上发生的事情也很有用。以下是分步说明:

  1. 有人打电话给getFirstUser().then(somefn)
  2. getFirstUser() 执行时,它调用getUsers()。该函数启动一些异步操作(可能是数据库查询操作),然后返回一个承诺(我将调用p1)。数据库操作尚未完成。
  3. 然后,在返回的 promise .then(fn) 上执行。这只是将函数注册为.then() 回调并返回一个新的承诺。 .then() 处理程序尚未调用,它已存储以供稍后调用。
  4. .then() 返回一个新的承诺(我会打电话给p2)。
  5. 然后函数 getFirstUser() 完成并返回上一步的 p2 承诺。
  6. 然后,一段时间后,getUsers() 承诺解析并导致之前在其上注册的 .then() 处理程序被调用。
  7. .then() 处理程序被调用时,您的return users[0].name; 将执行并将该值返回到承诺基础结构中。该值成为 promise p2 的解析值,这是从 getFirstUser() 返回的 promise。
  8. Promise p2 现已解决。这会导致调用原始调用者的 .then() 处理程序(步骤 #1 中的处理程序)并调用 someFn 并传递第一个用户解析值。

【讨论】:

    【解决方案2】:

    第一个 return 语句将返回 Promise 本身的实例。

    第二个return 将在callback 函数中触发,该函数已传递给Promise。

    关于 Promises 的好文章:MDNGoogle developers portal

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 2021-12-18
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多