如何循环承诺队列(序列化异步消息)

时间:2014-02-13 09:09:05

标签: javascript angularjs promise deferred

我有一个promises队列(代表msgs),我需要按顺序处理它。 我正在使用angularJS。

为了举例,假设我有connect()返回连接的承诺,然后msgQueue这是一个JavaScript承诺数组,每个都代表一个消息。

我会从这开始:

connect().then(function(){
    return msgQueue.dequeue();
});

// Async Loop on all msgs... How?

我是一个Defer / Promise新手,所以请耐心等待。

谢谢!

2 个答案:

答案 0 :(得分:3)

function serializeAsynch(queue,operate) {
  var msg = queue.dequeue();
  if (msg) msg.then(function(data) { operate(data); serializeAsynch(queue); });
}

connect().then(function() { serializeAsynch(msgQueue,process); });

我认为这会奏效。我们正在等待connect解析,然后传递msgQueue。我们在queue中获取第一条消息并设置它的解析处理程序来处理数据然后在队列中递归。当队列中没有任何内容时,递归将被转储。

答案 1 :(得分:0)

这样的事情会起作用。假设msgQueue.dequeue()返回一个承诺。

function doWork(work) {
    work().then(function(data) {
       //process data
       msgQueue.dequeue().then(function(work) {
           doWork(work);
       });
    });
}