在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(或任何其他类似的库)处理此问题的方法是什么?
答案 0 :(得分:1)
您可以使用task1
:
task1: (callback) =>
但是,我不推荐它。方法的胖箭与功能的胖箭完全不同,并且有性能损失。
您可能想要的是将这些函数的绑定版本传递给async.parallel
。您可以使用Function::bind
或匿名胖箭头函数执行此操作:
@task1.bind(@), # Function::bind
=> @task2(), # anonymous function