队列模式的函数式编程方法

处理asynchronous操作的队列是否可以在函数式编程的原则下实现? 这基本上是一个AsyncQueue。

var list = []; var inProgress = false; function Queue() {} Queue.prototype.enqueue = function(data) { list.push(data); if(!inProgress) { inProgress = true; start(list.shift()); } } function start(data) { // initiate some async activity, and call dequeue on completion } function dequeue() { if(list.length) { start(list.shift()); } else { isProgress = false; } } 

很明显,有一种状态得到pipe理,无论是与listinProgress ,不知道如何转换成它的function编程等效。 F#代码也欢迎。

基于Javascript承诺的方法也欢迎。 注意:列表不是固定的大小,而是随机地dynamic推入。