【发布时间】:2018-08-22 11:55:13
【问题描述】:
我正在尝试做一些相当简单的事情:
我有一个属于类的函数,在函数中我调用了
async 方法,我使用.then 语法来监听它的完成。一世
然后使用箭头函数执行操作。
这是我的箭头函数中出现问题的地方,this
根据 VS Code 调试器未定义。但是,this 是在函数中定义的
(write(document)) 包含箭头函数。
下面是代码:
const fs = require('mz/fs');
const path = require('path');
class DB {
constructor(name) {
this.db = path.normalize("./");
}
write(document) {
const dir = path.normalize(this.db + "/" + document);
fs.exists(dir).then((exists) => {
console.log(this); // ADDED THIS IN EDIT.
if (!exists) {
return fs.mkdir(dir)
} else {
return new Promise();
}
}).then(() => {
const file = path.normalize(dir + "/" + document + ".json");
fs.readFile(file, (err) => {
console.log(err);
});
});
}
}
我想已经读过箭头函数会自动从定义箭头函数的范围绑定this。但也许我误解了?我主要使用 Dart,其中范围规则没有那么复杂,所以也许我将某些东西与 Dart 混为一谈?
--编辑--
抱歉,我的箭头函数实际上不需要this,但很惊讶VS Code 调试器将其显示为undefined。我现在在箭头函数中添加了一个控制台日志,显然它已定义!因此,VS Code Node 调试器可能有问题?所以毕竟,无论如何,代码似乎没有问题......
【问题讨论】:
-
你有三个不同的箭头函数,它们都没有尝试使用
this。真的不清楚你在问什么。 -
“这是出了问题的地方……” — 您已将此标记为引用。你在引用谁?如果不是引号,请不要使用引号标记。
-
@Quentin 实际上我在任何箭头函数中都不需要
this,但在调试时我发现this由于某种原因在其范围内未定义。所以我想知道为什么会这样。
标签: javascript node.js ecmascript-6 es6-promise