2015-09-16 47 views
0

我构建了一个包含作业的数组。作业按开始和结束事务进行分组。事务是对web服务的调用。整个交易可以是这样的:按顺序发出http请求/ series

  1. 创建事务(电话/ opentransaction)
  2. DoSomething的A(呼叫/ A)
  3. DoSomething的B(来电/ B)
  4. 等。
  5. 关闭交易(电话/ closetransaction)

我的伪代码看起来是这样的:

for (var i=0;i<jobs;i++) 
{ 
    $http(job); 
} 

这工作正常,但顺序是随机的。我需要确保订单得到维护。如何强制执行?

+0

通过不使用循环,而是使用函数递归。但请注意,一次发送一个请求显然会比并行发送请求慢。 –

+0

你能举个例子吗? –

+0

不,对不起。还有其他人在意可以,或者你可以在SO上找到其他与此相同的许多问题之一。 –

回答

2

将您的$http电话的承诺保存起来,让下一份工作等到上一次完成。这可能是这个样子:

var promise = $q.when(true); 

for (var i = 0; i < jobs; i++) { 
    promise = promise.then(function() { 
    return $http(job); 
    }) 
} 
+0

什么是'工作'? – Bergi

0

我不认为是循环这样做的一个很好的方式,我会建议使用$q,只是通过与承诺的任务迭代。

function myPromiseFunction() { 
    return $q(function(resolve, reject) { 
     doThingOne 
      .then(doThing2) 
      .then(doThing3) 
      .then(doThing4) 
      .then(resolve) 
      .catch(function(error) { 
       console.log("Error in my promise:", error); 
      }); 
    }); 
} 

doThing是你的情况的第一件事就是将创造交易,如果需要返回的东西到下一个功能做到每个期望的行为,这样的功能。

+0

我不知道我有多少doThing功能,我会事先得到。 –

+0

@skone然后你有条件地申请或咖喱或任何你决定,你仍然需要承诺 – ajmajmajma

+0

@skone也许如果你进一步澄清什么是det确定动态功能。我明白你的意思,但我没有足够的信息说明他们如何/为什么要生成,需要按顺序运行。 – ajmajmajma