将范围保留在Async.js中

时间:2014-11-25 15:47:31

标签: node.js coffeescript async.js

在Coffeescript中给出以下课程:

class MyClass extends events.EventEmitter

    someObj: null # set somewhere during constructor

    someMethod: () ->
        async.parallel([
            @task1,
            @task2,
            @task3,
        ], (err, results) ->
            doSomething()

    task1: (callback) ->
            @someObj.funnyMethod()   # fails
            callback()
);

第二行最后一行的@someObj.funnyMethod()调用失败:

TypeError: Cannot read property 'funnyMethod' of undefined

显然,this指的是回调内的上下文。对于正常的回调,我已经知道我们将使用胖箭头操作符=>而不是瘦的->

使用async.js(或任何其他类似的库)处理此问题的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用task1

定义中的胖箭头
task1: (callback) =>

但是,我不推荐它。方法的胖箭与功能的胖箭完全不同,并且有性能损失。

您可能想要的是将这些函数的绑定版本传递给async.parallel。您可以使用Function::bind或匿名胖箭头函数执行此操作:

@task1.bind(@), # Function::bind
=> @task2(),    # anonymous function