function getFirstUser() {
return getUsers().then(function(users) {
return users[0].name;
});
}
大家好,我自己学习js,在阅读有关承诺的文章时,我遇到了这个功能。我没理解为什么第二次回归工作时需要第一次返回。事先提醒
答案 0 :(得分:1)
第一个return
语句将返回Promise本身的实例。
第二个return
将在callback
函数中触发,该函数已传递给Promise。
关于承诺的好文章:MDN,Google developers portal。
答案 1 :(得分:1)
首先,第一次返回会从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
承诺。getUsers()
承诺会解析并导致先前在其上注册的.then()
处理程序被调用。.then()
处理程序时,您的return users[0].name;
会执行并将该值返回到promise基础结构中。该值成为promise p2
的已解决值,这是从getFirstUser()
返回的承诺。p2
现已解决。这会导致调用原始调用者的.then()
处理程序(步骤#1中的处理程序)并调用someFn
并传递第一个用户解析的值。