Javascript 如何在承诺队列上循环(序列化异步消息)
我有一个承诺队列(代表MSG),我需要按顺序处理这些承诺。 我用的是angularJS 在本例中,假设我有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? 我是一个有点延迟/承诺的新手,所以请容忍我 谢谢 像这样的东西会
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); });