function getFirstUser() {
return getUsers().then(function(users) {
return users[0].name;
});
}
大家好,我正在自己学习js,在阅读有关promises的文章时,我遇到了这个函数。我不明白为什么第二次返回工作时需要第一次返回。事先提醒
首先,第一个返回从getUsers().then()
函数返回getFirstUser()
的结果。所以,getFirstUser()
的回报值是一个承诺。
第二个返回值是从.then()
promise回调中返回一个值。在promises的世界中,从.then()
处理程序返回一个值会将该promise的已解析值设置为该值。
第二个返回不是从getFirstUser()
函数返回。它仅从.then()
回调函数返回,并且返回值返回到调用.then()
处理程序的promise基础结构。
时间方面,了解时间轴中发生的事情也很有用。这是一步一步的描述:
getFirstUser().then(somefn)
。getFirstUser()
执行时,它调用getUsers()
。该函数启动一些异步操作(可能是数据库查询操作),然后返回一个promise(我将调用p1
)。数据库操作尚未完成。.then(fn)
。这只是将函数注册为.then()
回调,它返回一个新的promise。尚未调用.then()
处理程序,它将被存储以便稍后调用。.then()
返回一个新的承诺(我将称之为p2
)。getFirstUser()
并返回上一步中的p2
promise。getUsers()
承诺解析并导致先前在其上注册的.then()
处理程序被调用。.then()
处理程序时,您的return users[0].name;
会执行并将该值返回到promise基础结构中。该值成为promise p2
的解决值,这是从getFirstUser()
返回的承诺。p2
现已解决。这会导致调用原始调用者的.then()
处理程序(步骤#1中的处理程序)并调用someFn
并传递第一个用户解析的值。第一个return
语句将返回Promise本身的实例。
第二个return
将在callback
函数中发射,并传递给Promise。
关于Promises的好文章:MDN,Google developers portal。