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

时间:2017-12-30 21:59:43

标签: javascript promise

function getFirstUser() {
    return getUsers().then(function(users) {
               return users[0].name;
           });
}

大家好,我自己学习js,在阅读有关承诺的文章时,我遇到了这个功能。我没理解为什么第二次回归工作时需要第一次返回。事先提醒

2 个答案:

答案 0 :(得分:1)

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

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

关于承诺的好文章:MDNGoogle developers portal

答案 1 :(得分: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承诺。
  6. 然后,稍后,getUsers()承诺会解析并导致先前在其上注册的.then()处理程序被调用。
  7. 当调用.then()处理程序时,您的return users[0].name;会执行并将该值返回到promise基础结构中。该值成为promise p2的已解决值,这是从getFirstUser()返回的承诺。
  8. 承诺p2现已解决。这会导致调用原始调用者的.then()处理程序(步骤#1中的处理程序)并调用someFn并传递第一个用户解析的值。