如何构造此异步函数以获得同步响应



下面是我的一些示例代码:

async function getAppState() {
return {
appState: {
someBar: false
}
},
async function req() {
const resp = await fetch("https://www.example.com/script.php", {
method: 'GET',
})
this.appState.someBar = await resp.json();
}
}
let foo = await getAppState();
console.log(foo)

我希望能够填充appState,并将其作为参数传递给console.log,就像上面的例子一样。很明显,我所做的并不奏效。我试图表明我希望以同步方式运行getAppState(),以便在调用函数后将fetch()调用的结果获取到console.log中。构造此代码的正确方法是什么?

getAppState()不需要异步。它只是一个对象构造函数,它本身不执行fetch()

您需要用await调用req()方法来等待fetch()

req也需要在您返回的对象中。

function getAppState() {
return {
appState: {
someBar: false
},
async req() {
const resp = await fetch("https://www.example.com/script.php", {
method: 'GET',
})
this.appState.someBar = await resp.json();
}
}
}
let foo = getAppState();
await foo.req();
console.log(foo.appState.someBar);

我建议使用.then,而不是等待promise解析。像这样:

let foo = getAppState();
foo.then(r=> console.log(r));

除此之外,我不知道还有什么其他方法可以解决你的问题。

最新更新