2017-03-04 9 views
0

以下のコードでは、特定の条件が満たされた場合に自分自身が間違ったページで見つかった可能性があります。そのような場合、私のコード内から$ http.get呼び出しを呼び出すと、スクリプトを続行する前にhtmlソースコードが取得されるのを待ちますか?スクリプトを続行する前に、新しいURLからhtmlを取得

function checkUrl(url, size, code) { 
    return $http.get(url).then(function(response) { 
     var html = response.data; 

     var listedPage = utility.countClass(html, 'product-tile'); 

     if(listedPage > 1) { 
       url = getCorrectPage(html, code); 

       // this doesn't work, but I want to acquire the html of the newly acquired url 
       $http.get(url).then(function(response) { 
        html = response.data; 
       }); 
     } 

     stockData.name = getProductName(html); 

     return stockData; 
    }); 
} 
+0

あなたは「これが動作しない」と言う、*どのような方法*で、それが「機能しない」のでしょうか?どのように失敗するのですか? 'url'はあなたが期待するものではありませんか?それはあなたが期待するものではありませんか?他に何か? – David

答えて

1

どのようにこのようなものについて:

function checkUrl(url, size, code) { 
    return $http.get(url).then(function(response) { 
     var html = response.data; 
     var listedPage = utility.countClass(html, 'product-tile'); 

     if(listedPage > 1) { 
      url = getCorrectPage(html, code); 
      return $http.get(url).then(function(response) { 
       html = response.data; 
       stockData.name = getProductName(html); 
       return stockData; 
      }); 
     } 
     else { 
      stockData.name = getProductName(html); 
      return stockData; 
     }    
    }); 
} 
0

JavaScriptで同期I/Oを書き込むことはできません。あなたが望むものに最も近いのはPromiseです。

0

問題は、非同期性が$http.get(url)の場合は不可能なロジックを作成することです。

非同期は、js:listenを実行するような非同期です。終了したら、この関数を呼び出すと、私はあなたに渡します。 あなたは彼にこの指示を与え、それを別のスレッドに委任してすぐにプログラムを実行し続けます。 そのスレッドが戻ったら、渡された関数が実行されます。しかし、これはあなたのコードの残りの部分がすでに実行終了してからです。

コードが構造化されているようにすることはできません。

あなたが望む行動が$http.get(url)に渡す関数に含まれるように、あなたは再定式化する必要があります。

関連する問題