假设我具有需要链接两个诺言的功能
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()
...
}
答案 0 :(得分:1)
您只需要删除一个返回诺言的表达式。 fetch
返回一个Promise,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()
使用then()
方法返回一个承诺。并且then()
在这里将返回一个承诺,该承诺将在解析JSON内容时解决。