返回另一个本身正在返回的函数

问题描述 投票:-1回答:2
function getFirstUser() {
    return getUsers().then(function(users) {
               return users[0].name;
           });
}

大家好,我正在自己学习js,在阅读有关promises的文章时,我遇到了这个函数。我不明白为什么第二次返回工作时需要第一次返回。事先提醒

javascript promise
2个回答
1
投票

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

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

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

时间方面,了解时间轴中发生的事情也很有用。这是一步一步的描述:

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

1
投票

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

第二个return将在callback函数中发射,并传递给Promise。

关于Promises的好文章:MDNGoogle developers portal

© www.soinside.com 2019 - 2024. All rights reserved.