【发布时间】:2014-06-20 15:23:56
【问题描述】:
我有一个koa 应用程序,它有一堆功能被分成单独的文件。当调用一个路由时,我需要将上下文 this 传递给单独文件中的另一个函数(这也是一个路由)。
文件a.js路线-http://127.0.0.1:3000/foo
exports.foo = function *() {
this.body = 'Some Value';
}
文件b.jsroute - http://127.0.0.1:3000/bar
var a = require('a');
exports.bar = function *() {
this.body = yield a.foo(); // this obviously doesn't work.
}
我希望能够yield a.foo() 使用当前上下文 (this) 并让它像普通路由器调用它一样运行。
【问题讨论】:
-
我认为你的共享功能最好放在一个中间件中,
/foo和/bar路由都可以调用yield this.sharedFeature(opts)。如果你想走自己的路,那么就做yield a.foo.bind(this) -
嗯,@kilianc 好像在做
yield a.foo.bind(this)并没有真正调用函数也没有从函数返回?a.foo有什么特别需要做的吗? -
a.foo 是一个生成器,对吧?那么你不必特别做任何事情,试试
a.foo.call(this)但.bind也应该可以工作 -
@kilianc 你是对的,这确实有效。如果你把它作为答案,我会接受。感谢您的帮助。