0

私はプラグインを持っています。プラグインには、要素を入力する側の戻り方向(top、left ..など)があります。問題は、プラグイン内の1つの関数がタイムアウト後に実行されるため、プラグインを呼び出すと、明らかに未定義が返されることです。

;(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
    }
})

もうそれほどきれいに見えません

4

2 に答える 2

2

関数は非同期であるため、コードは関数がいつ完了するかを認識せず、関数の実行が終了するまで待つことができません。したがって、コードが完了して結果を返すのを待つことはできません。

コールバック関数の要件を回避するには、非同期コードを回避する (setTimeout を回避する) 必要があります。それ以外の場合は、コールバック関数が必要になります

于 2013-03-18T22:53:54.210 に答える
2

コールバック関数を使用して回避することはできません。これはsetTimeout、一般的な非同期プログラミングの性質です。それは良いことです。「きれい」に見えなくても、思いとどまらないでください。

しかし、見栄えを良くするために、プラグイン呼び出しでコールバックを定義する必要はありません。

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

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

掃除!

于 2013-03-18T22:56:07.567 に答える