使用 async/await 链接两个 promise
Chaining two promises using async/await
假设我有这个函数需要链接两个 promise
async function getPosts() {
let p1 = await fetch(...)
let p2 = await fetch(...)
let post1 = await (await p1).json()
let post2 = await (await p2).json()
...
}
我是否需要使用双 await
才能将完成的结果输入 post1
还是多余?
async function getPosts() {
let p1 = await fetch(...)
let p2 = await fetch(...)
let post1 = await (p1).json()
let post2 = await (p2).json()
...
}
您只需去掉表示return承诺的表达式即可。 fetch
return 是一个承诺,json()
方法也是如此。
async function getPosts() {
let p1 = await fetch(...)
// fetch() returns a promise, `await p1` unwraps that promise.
let post1 = await p1.json()
// p1 is a fetch response, just await the `json()` method.
}
但是,您可以通过混合使用 promise 回调和 await
语法来变得更简洁:
let post1 = await fetch(...).then(res => res.json())
这里 fetch()
return 是一个带有 then()
方法的承诺。 then()
这里将 return 一个在 JSON 内容被解析时解析的承诺。
假设我有这个函数需要链接两个 promise
async function getPosts() {
let p1 = await fetch(...)
let p2 = await fetch(...)
let post1 = await (await p1).json()
let post2 = await (await p2).json()
...
}
我是否需要使用双 await
才能将完成的结果输入 post1
还是多余?
async function getPosts() {
let p1 = await fetch(...)
let p2 = await fetch(...)
let post1 = await (p1).json()
let post2 = await (p2).json()
...
}
您只需去掉表示return承诺的表达式即可。 fetch
return 是一个承诺,json()
方法也是如此。
async function getPosts() {
let p1 = await fetch(...)
// fetch() returns a promise, `await p1` unwraps that promise.
let post1 = await p1.json()
// p1 is a fetch response, just await the `json()` method.
}
但是,您可以通过混合使用 promise 回调和 await
语法来变得更简洁:
let post1 = await fetch(...).then(res => res.json())
这里 fetch()
return 是一个带有 then()
方法的承诺。 then()
这里将 return 一个在 JSON 内容被解析时解析的承诺。