Tengo una función que debería devolver un token de acceso. Dentro de una función hay una solicitud, que me da el token. Pero no puedo acceder a él en la función principal.
Aquí está mi código desde dentro de una función:
var accessToken = 'test1'; request.post(authOptions, function(error, response, body) { accessToken = body.access_token; console.log('test2 ' + accessToken); }); console.log('test3 ' + accessToken);Da el siguiente resultado:
prueba3 prueba1
(nodo: 14744) ExperimentalWarning: stream/web es una característica experimental. Esta característica podría cambiar en cualquier momento
(Use node --trace-warnings ... para mostrar dónde se creó la advertencia)
prueba2 BQDzZHO1Eg99...
accessToken obtiene el valor dentro de la solicitud como se ve en test2, pero cuando lo recupero después de la función, aún no lo tiene. ¿Cómo puedo usarlo después? p.ej. en función recuperar
Cuando haces request.post , tu código tiene que esperar una respuesta del servidor en el que estás publicando. Esta respuesta se maneja en su function(error, response, body) función (pasada como el segundo argumento para request.post . Pero mientras tanto, el resto de su función continuará ejecutándose. He agregado comentarios para probar y explica esto mas adelante:
var accessToken = 'test1'; // First line of your code is executed first // Now we execute request.post request.post(authOptions, function(error, response, body) { // This is only executed whenever the response is received. It may be many milliseconds later accessToken = body.access_token; console.log('test2 ' + accessToken); }); // This is executed immediately after the `request.post`. Therefore accessToken will still be 'test1'. console.log('test3 ' + accessToken); En su lugar, puede devolver una Promise o usar devoluciones de llamada para obtener el token de acceso de esta función. Aquí hay una función básica de devolución de llamada:
function getAccessToken(callback) { request.post(authOptions, function(error, response, body) { callback(body.access_token); }); } getAccessToken(function(myToken) { // Here is your token. });