这可能是一个非常小的问题,但我无法找到解决方案,所以请耐心等待我!
我不明白为什么在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
正常的屏幕截图:
答案 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)
通过将箭头函数指定给createEntity
,this
inside the arrow function被赋予声明箭头函数的范围中this
的值,这可能是全局对象(因此,如果您正在使用use strict
,this
将是undefined
),即使您使用call
调用该函数,它也会保持这种状态。
使用通用函数表达式
createEntity: function () {
...
}