如何在声明前的promise链接中使用变量



我在使用promise时遇到了以下代码。它工作正常。

关于异步/等待代码是如何在节点上运行的,我已经读得很浅了。但是,在下面的代码中,如何在.then()函数内部访问session变量?这段代码是否只是偶然发生的,或者节点如何运行异步/等待代码,使session变量在.then()函数中可用?

async function asyncFunction(
cb: (filePath: string, session: Session) => Promise<any>,
) {
readFile().then(filePath => cb(filePath, session));
const session = await verifyToken();
}

这段代码能正常工作只是偶然的吗?

是。如果verifyToken的时间比readFile长,则在运行.then()回调时,session将不会初始化,并且会出现异常。

这个问题的正确解决方案是Promise.all,并且不使用回调:

async function asyncFunction(): Promise<[filePath: string, session: Session]> {
return Promise.all([readFile(), verifyToken()]);
}

这是变量作用域的一个完美例子。在您的情况下,这完全是该代码工作的机会。由于CCD_ 10比CCD_。因此,session变量在then函数中得到回调之前被启动。

如果verifyTokenreadFile花费更长的时间(甚至只有一毫秒(,那么它将抛出Cannot access variable before initialization错误。

最新更新