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 la promesa y los parámetros de texto? ¿Existen trucos para evitar la función interna?
javascript
promise
ecmascript-6
es6-promise
usuario3110667
fuente
fuente
bind
método? - que también es extremadamente lento.Respuestas:
Puede usar
Function.prototype.bind
para crear una nueva función con un valor pasado a su primer argumento, como estey puedes cambiar
doWork
a,Ahora,
text
estará realmente'text'
dentrodoWork
ydata
será el valor resuelto por la Promesa.Nota: asegúrese de adjuntar un controlador de rechazo a su cadena de promesas.
Programa de trabajo: copia en vivo del REPL de Babel
fuente
call
invoca una función en el lugar,bind
crea una nueva función, sin embargo, ambos aceptan un contexto de ejecución como su primer argumento.Quizás la respuesta más sencilla es:
O, dado que está etiquetado
ecmascript-6
, usando funciones de flecha:Encuentro esto más legible y no demasiado para escribir.
fuente
Usa curry.
fuente
curriedDoWork
una promesa haciendoreturn new Promise()
en la primera línea de esta función, la promesa se ejecuta tan pronto como llamecurriedDoWork()
(como lo hace en..then(curriedDoWork('text'))
Lodash ofrece una buena alternativa para esto exactamente.
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:
Esto se adjuntará
text: 'myArgString'
althis
contexto dentro de la función.fuente