viceversa variable validacion pasar parametros obtener funcion formularios ejemplos cómo con caracter cadena buscar javascript promise ecmascript-6 es6-promise

javascript - variable - Promesas, pasar parámetros adicionales para luego encadenar



pasar variables javascript (4)

Una promesa, solo por ejemplo:

var P = new Promise(function (resolve, reject) { var a = 5; if (a) { setTimeout(function(){ resolve(a); }, 3000); } else { reject(a); } });

Después de llamar, entonces el método de la promesa:

P.then(doWork(''text''));

La función doWork se ve así:

function doWork(data) { return function(text) { // sample function to console log consoleToLog(data); consoleToLog(b); } }

¿Cómo puedo evitar devolver una función interna en doWork para obtener acceso a los datos de los parámetros de promesa y texto? ¿Hay algún truco para evitar la función interna?


Lodash ofrece una buena alternativa para esto exactamente.

P.then(_.bind(doWork, ''myArgString'', _)); //Say the promise was fulfilled with the string ''promiseResults'' function doWork(text, data) { console.log(text + " foo " + data); //myArgString foo promiseResults }

O, si desea que su función de éxito tenga solo un parámetro (los resultados de la promesa cumplida), puede utilizarlo de esta manera:

P.then(_.bind(doWork, {text: ''myArgString''})); function doWork(data) { console.log(data + " foo " + this.text); //promiseResults foo myArgString }

Esto adjuntará el text: ''myArgString'' al contexto this dentro de la función.


Puede usar Function.prototype.bind para crear una nueva función con un valor pasado a su primer argumento, como este

P.then(doWork.bind(null, ''text''))

y puedes cambiar doWork a,

function doWork(text, data) { consoleToLog(data); }

Ahora, el text será en realidad ''text'' en doWork y los data serán el valor resuelto por Promise.

Nota: Asegúrese de adjuntar un controlador de rechazo a su cadena de promesa.

Programa de trabajo: copia en vivo en REPL de Babel

function doWork(text, data) { console.log(text + data + text); } new Promise(function (resolve, reject) { var a = 5; if (a) { setTimeout(function () { resolve(a); }, 3000); } else { reject(a); } }) .then(doWork.bind(null, ''text'')) .catch(console.error);


Quizás la respuesta más directa es:

P.then(function(data) { return doWork(''text'', data); });

O, dado que esto está etiquetado como ecmascript-6 , usando funciones de flecha:

P.then(data => doWork(''text'', data));

Esto me parece más legible, y no demasiado para escribir.


Usa curry.

var P = new Promise(function (resolve, reject) { var a = 5; if (a) { setTimeout(function(){ resolve(a); }, 3000); } else { reject(a); } }); var curriedDoWork = function(text) { return function(data) { console.log(data + text); } }; P.then(curriedDoWork(''text'')) .catch( //some error handling );