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是没有用的。这个问题更相关