我有插件,它有返回方向(如: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
}
})
看起来不那么漂亮了
答案 0 :(得分:2)
您的函数是异步的,因此您的代码不知道函数何时完成,并且不能等到函数执行结束。因此,无法等待代码完成并返回结果。
为了避免使用回调函数,您必须避免异步代码(避免使用setTimeout)。否则,您将需要一个回调函数
答案 1 :(得分:2)
你无法使用回调函数,这是setTimeout
和一般异步编程的本质。这是一件好事,如果它看起来不那么“漂亮”,不要被吓倒。
但是在可爱的方式中,没有必要在插件调用中定义回调 :
// "driver" code
$('elem').myplugin({
callback: myApplicationCallback //or desired name
});
// your application logic code
function myApplicationCallback(direction) {
// do work
}
干净!