I came across the following code while working with promises. And it works correctly.
I have read shallowly on how async/await code is run on node. But, in the following code, how is the session
variable accessible inside the .then()
function? Is it just by sheer chance that this code works or is there something about how node runs async/await code that makes the session
variable available inside the .then()
function?
async function asyncFunction(
cb: (filePath: string, session: Session) => Promise<any>,
) {
readFile().then(filePath => cb(filePath, session));
const session = await verifyToken();
}
CodePudding user response:
Is it just by sheer chance that this code works?
Yes. If verifyToken
takes longer than readFile
, session
will not be initialised when the .then()
callback runs and you'll get an exception.
The proper solution for this problem is Promise.all
, and not using a callback:
async function asyncFunction(): Promise<[filePath: string, session: Session]> {
return Promise.all([readFile(), verifyToken()]);
}
CodePudding user response:
This is a perfect example of variable scope. In your case this is a sheer chance that this code works. Since the readFile
takes longer than verifyToken
. As a result, the session
variable is initiated before getting callback in then
function.
In case the verifyToken
takes longer that readFile
(even just by a milli-second), then it would throw Cannot access variable before initialization
Error.