javascript - setTimeout return

前端 未结 4 1266
臣服心动
臣服心动 2020-12-18 12:52

How can I use setTimeout if I want to return a value

$.each(pCodes, function(index, pCode) {
    setTimeout(func(parm1), 2000);      
});


function func(in)         


        
4条回答
  •  悲&欢浪女
    2020-12-18 13:03

    First of all, your call to setTimeout is wrong. You are calling the function func and then using the result in the setTimeout method. Your code is equivalent to:

    $.each(pCodes, function(index, pCode) {
      var temp = func(parm1);
      setTimeout(temp, 2000);      
    });
    

    As func returns 999, you will be doing setTimeout(999, 2000), which of course doesn't make sense. To call a function that takes a parameter from setTimeout you need a function that makes that function call:

    $.each(pCodes, function(index, pCode) {
      setTimeout(function() { func(parm1); }, 2000);
    });
    

    To handle the return value from func is a bit more complicated. As it's called later on, you have to handle the return value later on. Usually that is done with a callback method that is called when the return value is available:

    var callback = function(value) {
      // Here you can use the value.
    };
    $.each(pCodes, function(index, pCode) {
      setTimeout(function() { func(parm1, callback); }, 2000);
    });
    
    function func(in, callback) {
      var value = 999;
      callback(value);
    }
    

提交回复
热议问题