2017-03-04 29 views
0

在下面的代码中,有些情况下我可能会发现自己位于错误的页面上,然后在满足特定条件时重新路由。在这种情况下,我将如何从代码中调用$ http.get调用,并在继续执行脚本之前等待html源代码被恢复?在继续执行脚本之前从新网址检索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:听这个,当它完成时调用这个函数,我传递给你。 因此,你给他这个指令,并将它委托给另一个线程,并且继续立即运行你的程序。 当该线程返回时,它将运行您传递给它的函数。但是这总是在你的其他代码已经完成执行之后。

因此,无法按照您的代码结构化的方式进行操作。

您必须重新配置,以便将所需的操作包含在您传递给$http.get(url)的功能中。

相关问题