我在使用 Promise 時遇到了以下代碼。它作業正常。
我已經深入了解了異步/等待代碼是如何在節點上運行的。但是,在下面的代碼中,如何session在函式內部訪問變數.then()?這段代碼是否有效,或者節點如何運行 async/await 代碼使session變數在.then()函式內部可用?
async function asyncFunction(
cb: (filePath: string, session: Session) => Promise<any>,
) {
readFile().then(filePath => cb(filePath, session));
const session = await verifyToken();
}
uj5u.com熱心網友回復:
這段代碼有效嗎?
是的。如果verifyToken花費的時間超過readFile,回呼運行時session將不會被初始化.then()并且你會得到一個例外。
這個問題的正確解決方案是Promise.all,而不是使用回呼:
async function asyncFunction(): Promise<[filePath: string, session: Session]> {
return Promise.all([readFile(), verifyToken()]);
}
uj5u.com熱心網友回復:
這是可變作用域的完美示例。在您的情況下,這絕對是該代碼有效的機會。由于readFile需要比 更長的時間verifyToken。結果,session變數在then函式中得到回呼之前被初始化。
如果verifyToken需要更長的時間readFile(甚至只是一毫秒),那么它會拋出Cannot access variable before initialization錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/450040.html
標籤:javascript 节点.js 异步等待 承诺
