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

Javascript 如何在承诺队列上循环(序列化异步消息),javascript,angularjs,promise,deferred,Javascript,Angularjs,Promise,Deferred,我有一个承诺队列(代表MSG),我需要按顺序处理这些承诺。 我用的是angularJS 在本例中,假设我有connect()返回连接承诺,然后是msgQueue这是一个JavaScript承诺数组,每个承诺表示一个消息 首先,我要这样做: connect().then(function(){ return msgQueue.dequeue(); }); // Async Loop on all msgs... How? 我是一个有点延迟/承诺的新手,所以请容忍我 谢谢 像这样的东西会

我有一个承诺队列(代表MSG),我需要按顺序处理这些承诺。 我用的是angularJS

在本例中,假设我有
connect()
返回连接承诺,然后是
msgQueue
这是一个
JavaScript
承诺数组,每个承诺表示一个消息

首先,我要这样做:

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

// Async Loop on all msgs... How?
我是一个有点延迟/承诺的新手,所以请容忍我


谢谢

像这样的东西会有用的。假设
msgQueue.dequeue()
返回承诺

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

我想那会管用的。我们正在等待
connect
解析,然后传入
msgQueue
。我们获取
队列中的第一条消息,并将其解析处理程序设置为处理数据,然后在队列上递归。当队列中没有剩余内容时,递归将转储。

递归解决方案不会导致堆栈溢出(没有双关语)如果有太多的消息?我收回我的评论-因为它是异步的,所以没有实际的递归,也没有堆栈增长。在Erlang中编程使您认为这是程序的自然流。真不敢相信我一定要查这个,我想我已经有一段时间没到二郎岛了/
function serializeAsynch(queue,operate) {
  var msg = queue.dequeue();
  if (msg) msg.then(function(data) { operate(data); serializeAsynch(queue); });
}

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