Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Coffeescript,我该如何编写这个排队函数示例,尤其是循环?_Javascript_Coffeescript - Fatal编程技术网

Javascript Coffeescript,我该如何编写这个排队函数示例,尤其是循环?

Javascript Coffeescript,我该如何编写这个排队函数示例,尤其是循环?,javascript,coffeescript,Javascript,Coffeescript,我正在尝试获取一些示例,说明如何在CoffeeScript到JavaScript中做一些不同的事情。在这个排队函数的例子中,我对如何在CoffeeScript中处理这个问题感到困惑 wrapFunction = (fn, context, params) -> return -> fn.apply(context, params) sayStuff = (str) -> a

我正在尝试获取一些示例,说明如何在CoffeeScript到JavaScript中做一些不同的事情。在这个排队函数的例子中,我对如何在CoffeeScript中处理这个问题感到困惑

    wrapFunction = (fn, context, params) ->
            return ->
                fn.apply(context, params)        

    sayStuff = (str) ->
        alert(str)


    fun1 = wrapFunction(sayStuff, this, ['Hello Fun1'])
    fun2 = wrapFunction(sayStuff, this, ['Hello Fun2'])

    funqueue = []
    funqueue.push(fun1)
    funqueue.push(fun2)

    while (funqueue.length > 0) {
        (funqueue.shift())();   
    }
尤其是我该如何在咖啡脚本中重写这个

while (Array.length > 0) {
    (Array.shift())(); 

非常简单的语法。但是,如何使函数仅在前一个函数完成时启动?您是在询问如何使用CoffeeScript还是如何编写并发队列?此示例是顺序的-CoffeeScript在数组上循环是顺序的,而不是并行的,因此,在CoffeeScript循环调用下一个函数之前,队列中的每个函数都必须返回。我在问如何写一个顺序队列(一个队列,其中每个函数仅在前一个函数完成时触发。警报是一个糟糕的示例。但是,如果说这些函数是动画,做了5秒钟的事情,我想触发它们,这样函数fun2只在fun1完成时才会触发。我正在寻找CoffeeScript实现这一点的方法!所以我只需要编写一个completeeCallback函数?已编辑。
next
将自身作为参数传递给每个排队函数。每个排队函数应确保调用传递给它的参数(此处,
f1
中的形式参数名称为
completeCallback
)为了使下一个排队函数被调用。这是必要的,因为
f1
可以设置一个AJAX调用并立即返回。同时,它将
success
处理函数传递到AJAX调用中,浏览器将在稍后的某个点调用该函数。函数队列需要等待成功处理函数调用在返回
f1
之前(这是根据您对问题的描述)。Meh,这也不能作为顺序回调。抱歉
fun1 = -> alert 'Hello Fun1'
fun2 = -> alert 'Hello Fun2'

funqueue = [fun1, fun2]

el() for el in funqueue
f1 = (completeCallback) ->
  console.log('Waiting...')
  completeCallback()

funcs = [ f1, f2, f3 ]

next = ->
  if funcs.length > 0
    k = funcs.shift()
    k(next)

next()