type son que metaboxes metabox custom create boxes add_meta_box javascript node.js callback promise

son - la función devolverá nulo desde javascript post/get



que son metaboxes (1)

Nuevo en JavaScript, y acaba de comenzar a leer acerca de Callback and Promise. Simplemente no entiendo el concepto de "esperar" hasta que tenga un valor de una solicitud POST / GET.

Más específico, ¿por qué no funciona esto?

var token = null; / / var options = {headers, form, etc} / function getToken() { request(options) .then(function (parsedBody) { this.token = parsedBody }) .catch(function (err) { console.log(''POST-Error'') }) return token } console.log(getToken())

Estoy usando la lib de ''request-promise'' en nodejs. Como entiendo cuando se llama solicitud, entonces la variable token se establecerá ya que es una promesa, ¿verdad?


Es complicado y no te culpo de que estés confundido. Todos los nuevos en Node parecen confundirse con eso.

Su problema aquí es que la variable se cambiará correctamente, pero aún no cuando se ejecuta console.log() .

Cuando una función devuelve una promesa, significa que algo sucederá en el futuro, posiblemente en un instante, tal vez más tarde, pero todavía no en el momento en que esa función devuelve la promesa.

Luego puede agregar los encargados de cumplimiento y rechazo a la promesa: se llamará a esos manejadores cuando la promesa se resuelva de verdad (es decir, la solicitud ha devuelto algunos datos o hay un error).

Entonces, no puedes escribir:

console.log(getToken());

Lo que puedes escribir es:

getToken() .then(data => console.log(''Data:'', data)) .catch(error => console.log(''Error:'', error));

Pero solo cuando realmente devuelves la promesa de tu función:

function getToken() { let promise = request(options); return promise; }

Ahora, podría usar una palabra clave async y hacer algo como esto:

async function getToken() { let data = await request(options); return data; }

pero esta función no devuelve data ; devuelve una promesa como en el ejemplo anterior.

Recuerde una cosa: no puede devolver ningún valor de su función que aún no esté disponible. Solo puede devolver una promesa si desea devolver algo antes de que lo tenga. Y cada función asíncrona, ya sea la async function , una función que devuelve explícitamente una promesa o una función que toma una devolución de llamada, volverá antes de que se realice la acción asíncrona, sin bloquear la secuencia.

Para más detalles, vea algunas de esas respuestas: