[英]Javascript: Return a promise inside async function
如果我有以下情况会有什么不同:
async function test () {
const foo = await bar()
return Promise.all([promise1, promise2])
}
代替:
async function test () {
const foo = await bar()
const [result1, result2] = await Promise.all([promise1, promise2])
// Given that I don't care about result1, result2 in this `test` function
return [result1, result2]
}
如果我这样做,我会得到相同的结果。 例如,我可以为这两种情况做到这一点:
test().then(([result1, result2]) => { ... })
但我对它们两者的行为方式的基本机制更加好奇。
换句话说,如果在函数内部我返回一个promise而不是一个值,async函数如何处理它?
我想你有效调用同步相似的功能与await
的承诺链中,而根据这个答案 :
您可以完全自由地调用promise链中的同步函数(来自.then()处理程序内)或异步函数,然后返回新的promise。
当您从.then()处理程序返回一些东西时,您可以返回一个值(它成为父承诺的已解析值),或者您可以返回另一个承诺(链接到前一个承诺)或者您可以抛出哪个像返回被拒绝的承诺(承诺链被拒绝)。
我认为异步函数在返回值方面的工作方式是检查该值是否包含在Promise对象中,如果不包含,则自动执行。 如果你明确地返回一个Promise,那么该函数对它没有任何作用。 我通过在异步函数中返回一个新的Promise来测试它:
async function test(){
var duration = resolveAfter(500)
return new Promise((resolve, reject) =>{})
}
var neverresolved = test()
从未解决的结果包含一个始终处于挂起状态的Promise,正如预期的那样。
这两个函数都返回一个Promise
。
const [result1, result2] = await Promise.all([promise1, promise2])
//HERE
return [result1, result2]
我在这里写的你可以访问作为promises结果的result1和result2 var。
等待是调用备选then
上Promise
和它的形式也比更具有可读性
Promise.all([promise1, promise2]).then(function(results){
});
如果你有多个顺序请求使用await是一个更好的选择
var response1= await promise1
var response2=await promise2
反对
promise1.then(function(){
promise2.then(function(){
promise3.then(function(){
})
})
})
编辑
在第一个函数中,关键字async是无用的,函数test将返回一个Promise
第二个函数将返回一个Promise,您可以在其中看到关键字await。 当等待的promise将解决函数内部的执行继续时,您可以访问promise的结果
编辑1
也许我理解你的意思,async关键字将你的返回值封装到一个promise中,该promise具有已经返回的已解析值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.