如果我有以下情况会有什么不同:
async function test () {
const foo = await bar()
return Promise.all([promise1, promise2])
}
Run Code Online (Sandbox Code Playgroud)
代替:
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]
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我会得到相同的结果.例如,我可以为这两种情况做到这一点:
test().then(([result1, result2]) => { ... })
Run Code Online (Sandbox Code Playgroud)
但我对他们两者的行为方式的基本机制更加好奇.
换句话说,如果在函数内部我返回一个promise而不是一个值,async函数如何处理它?
我认为异步函数对于返回值的工作方式是检查该值是否包装在 Promise 对象中,如果没有,则自动执行。如果您显式返回 Promise,则该函数不会对其执行任何操作。我通过在异步函数中返回一个新的 Promise 来测试这一点:
async function test(){
var duration = resolveAfter(500)
return new Promise((resolve, reject) =>{})
}
var neverresolved = test()
Run Code Online (Sandbox Code Playgroud)
结果 neverresolved 包含一个始终处于待处理状态的 Promise,如预期的那样。
| 归档时间: |
|
| 查看次数: |
5159 次 |
| 最近记录: |