2016-10-06 6 views
1

関数内で関数自体を呼び出そうとしています。私の場合、関数内で関数自体を呼び出す方法

基本的には、最初のリクエストにidがある場合は、別のリクエストを行うために関数自体を呼び出します。

私は test(...).thenを取得しています

function test(variable) { 
    var q = $q.defer(); 
    $http({ 
      method: 'get', 
      url: 'myurl.com' 
     }).then(function(returnData) { 
      if(returnData.getNewInfo) { 
       test(returnData.id).then(function(secondData){ 
        q.resolve(secondData); 
       }) 
      } else { 
        q.resolve(returnData) 
      }  
     });    
    } 
    return q.promise; 
} 

のようなものを持っているが、私は約束の内部で関数自体を呼び出すしようとしています

test(returnData.id).then(function(secondData){ 

このライン上のコンソールでの機能のエラーではありません。私の問題を解決する方法がわかりません。誰もそれについて私を助けることができますか?どうもありがとう!

答えて

0

はこれを試してみてください:

function test(variable, callback) { 
    /*snip*/ 
    callback(); 
    /*snip*/ 
} 
test("foo",test); 
+0

私のdownvoteの理由 - これは問題を解決していない - それを置き換えています。より複雑なシナリオでは、これは "コールバック地獄"につながります。 – Kaspars

+0

はい@ Kasparsはおそらく最善の答えではありません。他の答えを見て、実際の問題は元のコードの構文エラーでした。私の経験では、少なくとも一時的にコールバックに変換すると、実際の問題を洗い流すのに役立ちます。 – KyleUp

1

あなたのコードのインデントを修正して、あなたは以下の買ってあげる - 浮遊ブレースについての私のコメントを参照してください。関数はq.promiseではなく、未定義に戻ります。

function test(variable) { 
    var q = $q.defer(); 
    $http({ 
     method: 'get', 
     url: 'myurl.com' 
    }).then(function(returnData) { 
     if (returnData.getNewInfo) { 
      test(returnData.id).then(function(secondData) { 
       q.resolve(secondData); 
      }) 
     } else { 
      q.resolve(returnData) 
     } 
    }); 
} // <------- end of function - should be removed? 

return q.promise; 
} 
1

$httpコールを返すことができます。約束は連鎖可能であり、$httpは約束を返す。

function test(variable) { 
    return $http({ 
     method: 'get', 
     url: 'myurl.com' 
    }).then(function (returnData) { 
     if (returnData.getNewInfo) { 
      return test(returnData.id); 
     } else { 
      return returnData; 
     } 
    }); 
} 
関連する問題