【发布时间】:2020-01-28 14:38:39
【问题描述】:
我有几个关于 async/await 如何跨级别流动的问题。一些示例代码:
class Auth
async validateJwt() { // A
const result = await fetch(...) // #1
return await result.json(); // #1.5
}
async createJwtOrValidateExisting() { // B
const token = await validateJwt(); // #2
return token.data;
}
}
const auth = new Auth();
// React.js top level component
const App = props => {
useEffect(() => { // C
const tokenData = auth.createJwtOrValidateExisting(); // #3
}
}
我需要在第 2 步和第 3 步都等待吗?
如果是这样,我想我也需要在 C 行添加一个 async 关键字。
我知道 await 会暂停执行,这在 fetch() 和 .json() 步骤中是必需的。第一种方法很直观。
但是当你在第 2 步等待时,我相信这也需要更高级别函数上的 async 关键字,这意味着必须从它返回一个承诺。这似乎不合适,因为 .json() 步骤已在步骤 1.5 中处理/解决。
如果这种解释不正确,并且我在步骤 B / #2 上确实需要 async/await,这意味着我还必须将 useEffect 回调转换为异步函数。
对以上这些关键字的正确用法的任何解释都会有很大帮助,谢谢。
【问题讨论】:
-
简短的回答是……是的。
async函数总是返回一个承诺
标签: javascript asynchronous async-await