在继续脚本之前从新URL检索html

时间:2017-03-04 03:09:17

标签: javascript

在下面的代码中,在某些情况下,如果满足特定条件,我可能会发现自己在错误的页面上然后重新路由。在这种情况下,如何从我的代码中调用$ 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;
    });
}

3 个答案:

答案 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)的函数中。