一个接一个地获取网址

时间:2015-04-03 02:20:50

标签: angularjs angular-promise

我试图在另一个网站之间调用网址,而不是所有网址都在同一时间,但无论我怎样尝试,它们似乎都在同一时间发生。这就是我现在所拥有的......

$http.get('/some/url/foo1')
    .then($http.get('/some/url/foo2'))
    .then($http.get('/some/url/foo3'))
    .then($http.get('/some/url/foo4'))
    .then($http.get('/some/url/foo5'))
    .then($http.get('/some/url/foo6'))
    .then($http.get('/some/url/foo7'))
    .then($http.get('/some/url/foo8'))
    .then($http.get('/some/url/foo9'))
    .then($http.get('/some/url/foo10'))
    .then($http.get('/some/url/foo11'))
    .then($http.get('/some/url/foo12'))
    .then($http.get('/some/url/foo13'))
    .then($http.get('/some/url/foo14'));

这些不可能同时发生,当一个完成时,我希望下一个开始。

编辑:我也尝试将get放在这样的函数中,但它们仍然可以同时被调用

$http.get('/some/url/foo1')
    .then(rebuildModel('foo2'))
    .then(rebuildModel('foo3'))
    .then(rebuildModel('foo4'))
    .then(rebuildModel('foo5'))
    .then(rebuildModel('foo6'))
    .then(rebuildModel('foo7'))
    .then(rebuildModel('foo8'))
    .then(rebuildModel('foo9'))
    .then(rebuildModel('foo10'))
    .then(rebuildModel('foo11'))
    .then(rebuildModel('foo12'))
    .then(rebuildModel('foo13'))
    .then(rebuildModel('foo14'));

    function rebuildModel(modelName) {
        return $http.get('/some/url/' + modelName);
    }

Edit2:这很有效......我看到我做错了什么

function rebuildModel(modelName) {
    return function () {
        return $http.get('/some/url/' + modelName);
    }
}

2 个答案:

答案 0 :(得分:2)

then方法期望成功回调函数作为其第一个参数:

$http.get('url').then(successCallback);

successCallback必须是函数定义,例如:

$http.get('url').then(function() { ... });

如果您提供$http.get()作为参数:

$http.get('url').then($http.get('url'));

您正在调用一个函数,然后将返回值(这是一个promise对象)作为successCallback传递给then方法。

情况类似于以下更明显的情况:

a.  alert
b.  alert()

第一个是函数定义,第二个是调用函数。

我同意Chandermani的回答,这应该是正确的。如果它不起作用,也许检查错误:

$http.get('/some/url/foo1')
  .then(function() { return $http.get('/some/url/foo2'); })
  .then(function() { return $http.get('/some/url/foo3');},
   function() { alert('something went wrong');});

答案 1 :(得分:1)

您所做的链接不正确。它应该是这样的:

$http.get('/some/url/foo1')
    .then(function() { return $http.get('/some/url/foo2'); })
    .then(function() { return $http.get('/some/url/foo3');})

请记住,then函数也返回一个promise,它由其返回值,成功和错误回调解决。