var在Promise中变得不确定

时间:2016-07-28 16:20:51

标签: javascript node.js ecmascript-6

这可能是一个非常小的问题,但我无法找到解决方案,所以请耐心等待我!

我不明白为什么在const body = ctx.request.body ctx变得不确定。在调用this的{​​{1}}函数结转create()之前。

我做错了什么?

我正在调用这样的函数createEntity()

createEntity

module.exports = { createEntity: () => { var ctx = this // both ctx and this are fine return new Promise((resolve, reject) => { const body = ctx.request.body // <-- ctx is undefined resolve(); }) } } 来电create()。它是一个生成器函数,通过Koa.js包含createEntity()

co()

编辑:以下是调用create: function * () { this.body = yield createEntity.call(this) } 后我认为this正常的屏幕截图: enter image description here

2 个答案:

答案 0 :(得分:4)

  

ctx和这都很好

我对此表示怀疑。您正在使用箭头功能。您无法通过this设置箭头功能call,因为箭头没有自己的this 1

改为使用普通功能。

另见Arrow function vs function declaration / expressions: Are they equivalent / exchangeable?

1:this内的createEntity指的是模块的顶级this,即module.exports

this;        // <------------|
module.exports = {           |
  createEntity: () => {      |
    var ctx = this     // ---|
  }
}
console.log(this === module.exports); // true

答案 1 :(得分:1)

通过将箭头函数指定给createEntitythis inside the arrow function被赋予声明箭头函数的范围中this的值,这可能是全局对象(因此,如果您正在使用use strictthis将是undefined),即使您使用call调用该函数,它也会保持这种状态。

使用通用函数表达式

createEntity: function () {
    ...
}