队列模式的函数式编程方法
处理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理,无论是与list
和inProgress
,不知道如何转换成它的function编程等效。 F#代码也欢迎。
基于Javascript承诺的方法也欢迎。 注意:列表不是固定的大小,而是随机地dynamic推入。