可能是由于作用域或引用变量问题造成的。解决此问题的方法是,在async.series函数中使用箭头函数或将函数绑定到父级类的上下文(即'this”关键字)上。 以下是使用箭头函数解决此问题的示例代码:
class SomeClass { constructor() { this.someVariable = "Hello World!"; }
testFunction(callback) { async.series([ (cb) => this.seriesFunctionOne(cb), (cb) => this.seriesFunctionTwo(cb), (cb) => { console.log(this.someVariable); // 输出 "Hello World!" cb(); } ], callback); }
seriesFunctionOne(callback) { // some code... callback(); }
seriesFunctionTwo(callback) { // some code... callback(); } }
const testClass = new SomeClass(); testClass.testFunction(() => { console.log("Done!"); });
在testFunction函数中,我们使用箭头函数来确保我们访问了正确的类成员(this.someVariable)。使用箭头函数时,'this”关键字将指向外部的类实例。 如果您使用的是较旧版本的JavaScript,您可以将函数绑定到父级类的上下文上。以下是使用 bind() 方法实现的示例代码:
class SomeClass { constructor() { this.someVariable = "Hello World!"; this.testFunction = this.testFunction.bind(this); this.seriesFunctionOne = this.seriesFunctionOne.bind(this); this.seriesFunctionTwo = this.seriesFunctionTwo.bind(this); }
testFunction(callback) { async.series([ this.seriesFunctionOne, this.seriesFunctionTwo, (cb) => { console.log(this.someVariable); // 输出 "Hello World!" cb(); } ], callback); }
seriesFunctionOne(callback) { // some code... callback(); }
seriesFunctionTwo(callback) { // some code... callback(); } }
const testClass = new SomeClass(); testClass.testFunction(() => { console.log("Done!"); });
这会将每个函数绑定到实例类的上下文中,以便允许函数内部访问类成员。