2017-03-18 13 views
2

こんにちは私は相談しました:https://stackoverflow.com/a/9652434/3109607しかし、まだコールバックに問題があります。私はJSがセクシーで、コールバックシェルドットコム、CW Beuchlerのブログ、GithubのMaxogenレポ、そしてこのトピックに関する他のものもチェックしました。コールバック関数を特定する方法

私の質問に答えるには親切でしたが、彼が指摘していない限り、私は下のリンクにある「thingToRun」の機能を特定できません。私はここにコードを含めたいと思いますが、私は問題があったので要点を使用しなければなりませんでした。

ほとんどの関数では、これは "コールバック"と書かれているので、必ずしも必要ではないことを説明するために書いていましたが、どの関数がgetDataに渡されているかは分かりません。私がBeuchlerさんのコメントを削除して自分で見つけようとすると、私は困っています。私には、logDataのように見えます(私は、各関数が受け取る引数に基づいています)が、これは通常の関数です。あるいは、私は機能を誤解しているかもしれません。

ユーザーの緯度/経度を取得する簡単なアプリケーションを作成するための情報が必要です。緯度/経度に基づいてユーザーの都市名を取得するGoogleのAPIをチェックし、Dark Sky APIをチェックして、緯度/経度。だから私は一緒に遊ぶために複数のコールバックを取得する方法を把握する必要があります。

氏Beuchlerさんの要旨へのリンク(役立つが、私はまだそれを得ることはありません)私への応答:https://gist.github.com/theednaffattack/25d24d620cc35b160c17a95756fd1927

+0

非常に、非常に良い質問! –

答えて

0

私が正しく質問を理解していれば、あなたのように渡されるfunctionの名前を取得するつもりはコールバック。あなたのfunctionは次のようになります場合:

function myFunc(/*some parameters*/) { 
    //Do something 
} 

あなたは、ほとんどのWebブラウザでmyFunc.nameを使用して、その名前を取得することができます。この防弾を作成するには、このようなfunctionが必要になります。

function getFunctionName(func) { 
    if (typeof func === "function") { //Make sure the input is a function 
     if (func.name) { //This is a named function 
      return func.name; 
     } 
     var text = func + ""; 
     text = text.substring(0, text.indexOf("(")).trim(); 
     var spaceIndex = text.indexOf(" "); 
     if (spaceIndex > 0) { //We need something like function myFunc 
      return text.substring(text.indexOf(" ")).trim(); 
     } 
     return ""; //Does not have a name 
    } 
    return false; //Not a function 
} 

console.log(getFunctionName(myFunc)); 

myFuncという

console.log(getFunctionName()); 

意志のYIを得られますELD

console.log(function() {}); 

functionに名前がないとして、空の文字列を生成します。私たちはこの

function something() { 
    this.somethingElse = function() {}; 
} 

のようなものを定義する場合

その後、

console.log(getFunctionName((new something()).somethingElse)); 

は空の文字列を生成します。明らかに、我々はsomethingElseを得ることを望むだろうが、我々はこれに追加の調整が必要である。提案:

function nameFunction(func, name) { 
    func.funcionName = name; 
    return func; 
} 

、その後

function something() { 
    this.somethingElse = nameFunction(function() {}, "somethingElse"); 
} 

、その後、あなたは、このようgetDataからgetFunctionNameを呼び出す準備ができている私たちが今

function getFunctionName(func) { 
    if (typeof func === "function") { //Make sure the input is a function 
     if (func.name) { //This is a named function 
      return func.name; 
     } else if (typeof func.functionName === "string") { //We called nameFunction on this 
      return func.functionName; 
     } 
     var text = func + ""; 
     text = text.substring(0, text.indexOf("(")).trim(); 
     var spaceIndex = text.indexOf(" "); 
     if (spaceIndex > 0) { //We need something like function myFunc 
      return text.substring(text.indexOf(" ")).trim(); 
     } 
     return ""; //Does not have a name 
    } 
    return false; //Not a function 
} 

に使用されている functionを変更:

function getData(dataURI, thingToRun) { 
    var myData = getSomeData(); 
    console.log(getFunctionName(thingToRun)); 
    thingToRun(myData); 
} 
+0

これはかなりクールです、ありがとう。 –

+0

@theEdNaffAttackようこそ。 –

関連する問題