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

bindmétodo? - que también es extremadamente lento.Respuestas:
Puede usar
Function.prototype.bindpara crear una nueva función con un valor pasado a su primer argumento, como estey puedes cambiar
doWorka,Ahora,
textestará realmente'text'dentrodoWorkydataserá 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
callinvoca una función en el lugar,bindcrea 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
curriedDoWorkuna 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'althiscontexto dentro de la función.fuente