【问题标题】:Pass function with parameters, but not its execution result传递带参数的函数,但不传递其执行结果
【发布时间】:2016-06-13 08:58:02
【问题描述】:

在我的组件中,我有一个静态的need 属性,它存储了一个function。在幕后有中间件执行这个function,以便在渲染组件之前执行一些异步API调用。看起来是这样的:

static need = [
  myFunc(token)
]

但是这会导致问题,因为有一个token 参数实际上会执行该函数,因此它的promise 是作为need 传递的,而不是function 本身。例如,这工作得很好,因为它不执行函数:

static need = [
  myFunc
]

但是这样我就没有能力传递令牌了。我试图弄清楚如何使用令牌将此函数传递给need,但不执行它,因为它是在中间件中完成的。

【问题讨论】:

    标签: javascript function reactjs ecmascript-6


    【解决方案1】:

    你可以的

    var need = [
      myFunc, token
    ];
    

    你可以调用它

    need[0].apply(null, need.slice(1-need.length));
    

    示例演示

    function a(b){ console.log(b) } 
    var  need = [
      a, "1"
    ];
    
    need[0].apply(null, need.slice(1-need.length));

    【讨论】:

      【解决方案2】:

      鉴于您可以控制myFunc

      function myFunc(params) {
         return function() {
            // do something with params
         }
      }
      

      因此,为了执行实际的函数代码,您必须调用它两次:myFunc('foo')(),这适合您在调用函数之前维护参数的需要。

      【讨论】:

        【解决方案3】:

        你可以使用闭包

        static need = [
            function (token) {
                return myFunc;
            }(token);
        ]
        

        ES6

        static need = [
            (token => myFunc)(token)
        ]
        

        【讨论】:

        • Nina,你有没有 es6 的语法?试过 (token) => { return myFunc }(token) 似乎没有成功
        【解决方案4】:

        现在您可能已经解决了这个问题,但我觉得您可以创建一个对象并将其添加为对象属性,而不是将其存储在数组中。将其存储在数组中没有害处

        //Define the function
        var need = {
          myFunc:function(token){
           alert(token)
          }
        };
        
        // Invoking
        need['myFunc'](1);
        
        //dynamic invoke
        var dynamicInvoke = 'myFunc';
        need[dynamicInvoke](2);
        

        JSFIDDLE

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-03
          • 1970-01-01
          • 2015-02-10
          • 2011-06-11
          • 2019-02-11
          • 2013-04-20
          • 1970-01-01
          相关资源
          最近更新 更多