Tengo una función que devuelve información de una llamada API, parte de la cual es un token de acceso. Luego necesito conectar ese token de acceso a los parámetros de una URL de redireccionamiento. El único problema es que se invoca la redirección antes de que se devuelvan los datos. ¿Alguna idea sobre cómo puedo esperar hasta que se devuelvan los datos antes de invocar la redirección?
Aquí está el código:
oauthClient.createToken(req.url) .then((authResponse) => { oauth2_token_json = JSON.stringify(authResponse.getJson(), null,2); let newToken = JSON.parse(oauth2_token_json) accessToken = newToken.access_token }) .catch((e) => { console.error(e); }); res.redirect(`http://localhost:3000/?token=${accessToken}`) });Agregue un .then() más y asegúrese de que el .then() anterior devuelva el authToken (o cualquier variable). Ahora ejecute esa lógica de res.redirect(..).. en el siguiente .then() anidado.
De esta manera, se asegura de que el código espere a que la parte asincrónica termine primero. then-ables son la mejor manera de asegurarse de que su código solo se ejecute una vez que se resuelva la promesa. El ejecutor de JavaScript salta a la siguiente línea de código una vez que ve un bloque de código asíncrono, es decir, podría ser una promesa, .then()s, async-awaits. Esta fue la razón por la que res.redirect() se estaba ejecutando un poco antes.