Skip to content
Advertisement

How can variable be used in promise chaining before declaration?

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();
}

Advertisement

Answer

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()]);
}
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement