koa.js を使用して、バックグラウンドで長時間実行されるジェネレーター関数を実行する API を作成しますが、ユーザーにトークンをすぐに送り返します。
その後、ユーザーはそのトークンを使用して、後でジョブのステータスを取得できます。
'use strict';
var generateToken = function(){
//...
};
var processData = function *(data, token) {
//...
var a = yield analysis(data);
console.log(a) // a is undefined
};
app.post('/process_data', validate, function *(next) {
var token = generateToken();
var that = this;
setTimeout(function() {
for (var i of processData(that.request.body, token)){
continue;
}
});
this.body = "this should return immediately " + token;
return next;
});
setTimeout 内で実行すると、変数 'a' は保存されません。processData が通常の利回りとまったく同じように実行されるようにするにはどうすればよいですか?