Javascript 在异步函数上调用'bind()`部分有效
我在类构造函数的另一个模块中定义的异步函数上调用Javascript 在异步函数上调用'bind()`部分有效,javascript,node.js,bind,Javascript,Node.js,Bind,我在类构造函数的另一个模块中定义的异步函数上调用.bind(this) 课程安排如下 class CannedItem { constructor (config) { ... this._fetch = config.fetch.bind(this) ... } ... } 函数类似于 module.exports = [ { ... fetch: async () => { // Want to ref
.bind(this)
课程安排如下
class CannedItem {
constructor (config) {
...
this._fetch = config.fetch.bind(this)
...
}
...
}
函数类似于
module.exports = [
{
...
fetch: async () => {
// Want to refer to 'this' bound to the CannedItem object here
}
}
]
但是,当调用函数时,此
绑定到空对象
令人困惑的是,Visual Studio代码调试器在调试器窗口中将作用域中的对象绑定为this
,请参见所附的屏幕截图,但是在控制台中检查变量时会将其列为未定义。在我看来,这好像有一个错误。是这样还是我误用了.bind()
唯一有点不寻常的是异步函数。我尝试用async和.bind()
搜索问题,但没有骰子
我正在运行nodejs8.11.1和最新的VSCode(1.30.2)
无法重新绑定箭头函数,因为
此
已固定为词汇定义的此
。如果计划使用bind()
或其任何相关函数,则需要一个常规函数:
类CannedItem{
构造函数(配置){
this.myname=“标记”
this.\u fetch=config.fetch.bind(this)
}
}
设obj={
fetch:async()=>{//将无法工作
返回这个.myname
//要在此处引用绑定到CannedItem对象的“this”
}
}
设obj2={
异步fetch(){//works
返回这个.myname
//要在此处引用绑定到CannedItem对象的“this”
}
}
//传递箭头函数对象
设c1=新CannedItem(obj)
c1._fetch().then(console.log)//未定义
//传递正则函数对象
设c2=新CannedItem(obj2)
c2._fetch().then(console.log)//标记,那么调试器显示绑定到
CannedItem
的值这一事实,正如我所期望的那样,是一种误导吗?它基本上不应该显示这一点?在调试器代码中,它看起来像是fetch
直接在对象上,其中词法this
是正确的值。问题实际上是关于异步的使用,而不是关于arrow函数的绑定,因此引用duplicate是没有用的。这个问题更相关