JavaScript:将新变量传递给默认方法

时间:2017-03-08 22:32:29

标签: javascript node.js es6-promise asynccallback

我正在编写一个使用大量承诺的节点应用程序。为了保持我的代码可读性,我尽量删除尽可能多的匿名函数,并将它们存储在一个JavaScript对象中,如下所示。

let myCallbacks = {
  myFirstCallback: function(fulfill, reject) {
    // Do some stuff
    if(noError)
      fulfill({field: 'data'});
    else
      reject('ERROR');
  },
  mySecondCallback: function(fulfill, reject) {
    // Do some stuff
    if(noError)
      fulfill({field: 'data'});
    else
      reject('ERROR');
  }
}

let myFirstMethod = function() {
  return new Promise(myCallbacks.myFirstCallback);
}

let mySecondMethod = function() {
  return new Promise(myCallbacks.mySecondCallback);
}

这很有效。

现在我有一个功能,我需要将数据传递给我的回调。想象一下以下代码

let myCallbacks = {
  myFirstCallback: function(fulfill, reject) {
    // Do some stuff
    if(noError)
      fulfill({field: 'data'});
    else
      reject('ERROR');
  },
  mySecondCallback: function(fulfill, reject) {
    // Do some stuff
    if(noError)
      fulfill({field: 'data'});
    else
      reject('ERROR');
  },
  myThirdCallback: function(fulfill, reject, someVariable) {
    // Do some stuff
    if(someVariable*3>10)
      fulfill({field: 'data'});
    else
      reject('ERROR');
  }
}

let myFirstMethod = function() {
  return new Promise(myCallbacks.myFirstCallback);
}

let mySecondMethod = function() {
  return new Promise(myCallbacks.mySecondCallback);
}

let myThirdMethod = function(someVariable) {
  // Doesn't work
  return new Promise(myCallbacks.myThirdCallback);

  // Doesn't work
  return new Promise(myCallbacks.myThirdCallback(fulfill, reject, someVariable);

  // Doesn't work
  return new Promise(myCallbacks.myThirdCallback(someVariable));
}

将someVariable从myThirdMethod传递给myCallbacks.myThirdCallback()的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

var thatOtherCallback = function(variable)
{
   return function(fulfill, reject)
   {
     ... use variable and do whatever you need to do ...
   }
}

...

new Promise(thatOtherCallback(value));

但是如果没有更清楚地了解你想要实现的目标,很难说这是否是一个很好的解决方案。