我正在使用 ES6 类在 Node.js 中将一些功能捆绑在一起。这是(基本上)它的样子:
class processDocs {
constructor(id) {
this.id = id;
// console.log(this) returns { id: id }
}
getDocs(cb) {
// console.log(this) returns null
docs
.query(qb => {
qb.where('id', this.id);
})
.fetch()
.then(function(documents) {
cb(null, documents);
})
;
}
alterDocs(documents, cb) {
//some logic
}
reindexSearch(cb) {
//some logic
}
process() {
// console.log(this) returns { id: id }
async.waterfall([
this.getDocs,
this.alterDocs,
this.reindexSearch
]);
}
}
export default processDocs;
我认为对于 ES6 类,分配公共变量的方式是简单地引用this
,而通过构造函数初始化这些变量的方式正是它在我的类定义中的显示方式。
这是我调用类的方式(在单独的文件中):
var Processor = require('./processDocs');
var pr = new Processor(id);
var docs;
pr.process();
这就是问题所在,当我从构造函数中console.log
出来时this
,我得到了{ id: id }
预期的值;this
但是,每当我在运行时注销getDocs
时process
,它都是空的。this
但是,当我在瀑布之前注销时process()
,我得到了我的原始对象。
这有什么原因吗?
顺便说一句,我正在使用 node:v0.10.33
和 babel-node并且我使用标志4.6.6
运行 babel-node 。--harmony
在有人问之前,由于主要依赖项卡在v0.10.x
.
编辑我能够创建一个解决方法,但它不是很像 es6。问题似乎与async.waterfall
. 我不得不使用 a.bind
来修复它:
async.waterfall([
this.getDocs.bind(this),
this.alterDocs.bind(this),
this.reindexSearch.bind(this)
]);