是否可以根据Functional Programming的原则实施处理异步操作的队列?它基本上是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;
}
}
显然,有list
和inProgress
的某种状态被管理,不知道如何将其转换为等效的功能编程。 F#代码也欢迎。
基于Javascript Promise的方法也受到欢迎。注意:列表不是固定大小,项目随机动态推送到内部。