[removed] Passing parameters to a callback function

后端 未结 13 2120
隐瞒了意图╮
隐瞒了意图╮ 2020-11-22 15:48

I\'m trying to pass some parameter to a function used as callback, how can I do that?

function tryMe (param1, param2) {
    alert (param1 + \" and \" + param         


        
相关标签:
13条回答
  • 2020-11-22 16:19

    This would also work:

    // callback function
    function tryMe (param1, param2) { 
        alert (param1 + " and " + param2); 
    } 
    
    // callback executer 
    function callbackTester (callback) { 
        callback(); 
    } 
    
    // test function
    callbackTester (function() {
        tryMe("hello", "goodbye"); 
    }); 
    

    Another Scenario :

    // callback function
    function tryMe (param1, param2, param3) { 
        alert (param1 + " and " + param2 + " " + param3); 
    } 
    
    // callback executer 
    function callbackTester (callback) { 
    //this is the more obivous scenario as we use callback function
    //only when we have some missing value
    //get this data from ajax or compute
    var extraParam = "this data was missing" ;
    
    //call the callback when we have the data
        callback(extraParam); 
    } 
    
    // test function
    callbackTester (function(k) {
        tryMe("hello", "goodbye", k); 
    }); 
    
    0 讨论(0)
  • 2020-11-22 16:20

    When you have a callback that will be called by something other than your code with a specific number of params and you want to pass in additional params you can pass a wrapper function as the callback and inside the wrapper pass the additional param(s).

    function login(accessedViaPopup) {
        //pass FB.login a call back function wrapper that will accept the
        //response param and then call my "real" callback with the additional param
        FB.login(function(response){
            fb_login_callback(response,accessedViaPopup);
        });
    }
    
    //handles respone from fb login call
    function fb_login_callback(response, accessedViaPopup) {
        //do stuff
    }
    
    0 讨论(0)
  • 2020-11-22 16:23

    If you are not sure how many parameters are you going to be passed into callback functions, use apply function.

    function tryMe (param1, param2) {
      alert (param1 + " and " + param2);
    }
    
    function callbackTester(callback,params){
        callback.apply(this,params);
    }
    
    callbackTester(tryMe,['hello','goodbye']);
    
    0 讨论(0)
  • 2020-11-22 16:28
    function tryMe(param1, param2) {
      console.log(param1 + " and " + param2);
    }
    
    function tryMe2(param1) {
      console.log(param1);
    }
    
    function callbackTester(callback, ...params) {
      callback(...params);
    }
    
    
    
    callbackTester(tryMe, "hello", "goodbye");
    
    callbackTester(tryMe2, "hello");
    

    read more about the spread syntax

    0 讨论(0)
  • 2020-11-22 16:32

    I was looking for the same thing and end up with the solution and here it's a simple example if anybody wants to go through this.

    var FA = function(data){
       console.log("IN A:"+data)
       FC(data,"LastName");
    };
    var FC = function(data,d2){
       console.log("IN C:"+data,d2)
    };
    var FB = function(data){
       console.log("IN B:"+data);
        FA(data)
    };
    FB('FirstName')
    

    Also posted on the other question here

    0 讨论(0)
  • 2020-11-22 16:34
    //Suppose function not taking any parameter means just add the GetAlterConfirmation(function(result) {});
    GetAlterConfirmation('test','messageText',function(result) {
                            alert(result);
        }); //Function into document load or any other click event.
    
    
    function GetAlterConfirmation(titleText, messageText, _callback){
             bootbox.confirm({
                        title: titleText,
                        message: messageText,
                        buttons: {
                            cancel: {
                                label: '<i class="fa fa-times"></i> Cancel'
                            },
                            confirm: {
                                label: '<i class="fa fa-check"></i> Confirm'
                            }
                        },
                        callback: function (result) {
                            return _callback(result); 
                        }
                    });
    
    0 讨论(0)
提交回复
热议问题