在下面的代码中,在某些情况下,如果满足特定条件,我可能会发现自己在错误的页面上然后重新路由。在这种情况下,如何从我的代码中调用$ http.get调用,并等待在继续我的脚本之前检索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 :(得分: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;
}
});
}
答案 1 :(得分:0)
您无法在JavaScript中编写同步I / O.最接近您想要的是Promise。
答案 2 :(得分:0)
问题在于,您正在创建一个在$http.get(url)
的异步性质下无法实现的逻辑。
异步就像你在告诉js:听到这样做,当它完成后调用这个函数我正在传递给你。 所以你给他这个指令,它将它委托给另一个线程并继续立即运行你的程序。 当该线程返回时,它将运行您传递给它的函数。但这总是在其余代码已经完成执行之后。
因此,不可能按照代码的结构方式做你想做的事。
您必须重新制定,以便将所需的操作包含在传递给$http.get(url)
的函数中。