在没有回调函数的jQuery插件中延迟执行后返回结果?

时间:2013-03-18 22:48:35

标签: jquery jquery-plugins

我有插件,它有返回方向(如:top,left ..),你进入元素的哪一边。问题是 - 插件中的一个函数在一些超时后执行,所以当我调用插件时 - 很明显它返回我未定义。

;(function($){
  jQuery.fn.myplugin = function(options){

    var somefunction = function(){
        setTimeout(function(elem, e){
            return elem * e; // some action, no matter
        }, 500)              // the important thing - it's executed after plugin returned undefined
    }

    return someFunction;

  };
})(jQuery);

是否可以在不使用回调函数的情况下解决此问题,或者在这种情况下是否有必要?

我想像

那样使用插件
var direction = $('elem').myplugin();

但回调应该是

$('elem').myplugin({
    callback: function(direction){
        // so i got direction here
    }
})

看起来不那么漂亮了

2 个答案:

答案 0 :(得分:2)

您的函数是异步的,因此您的代码不知道函数何时完成,并且不能等到函数执行结束。因此,无法等待代码完成并返回结果。

为了避免使用回调函数,您必须避免异步代码(避免使用setTimeout)。否则,您将需要一个回调函数

答案 1 :(得分:2)

你无法使用回调函数,这是setTimeout和一般异步编程的本质。这是一件好事,如果它看起来不那么“漂亮”,不要被吓倒。

但是在可爱的方式中,没有必要在插件调用中定义回调

// "driver" code
$('elem').myplugin({
  callback: myApplicationCallback //or desired name
});

// your application logic code
function myApplicationCallback(direction) {
  // do work
}

干净!