如何将return一个值转入koa生成器?
How to return a value into koa generator?
我有这样的东西:
var app = koa;
var run = function (generator){
var it = generator(go);
function go(err, res) {
it.next(res);
}
go();
}
app.use(function *() {
run(function *(callback) {
var result = yield asyncFunc(params, callback);
});
//I want to get value of result here;
});
那么如何用Koa构思得到这个值呢?
要获取函数的值,只需将其包装在 Promise 中
app.use(function *(){
var promise = new Promise (function(resolve, reject){
asyncFunc(params, function(err, res){
if(err){reject(err)}
else{resolve(res)}
}
}
/*Added koa error handling example also*/
try {
var result = yield Promise
// do what you want with result
}
catch{
this.status = 500 // or 404, etc, whatever is appropriate
/* the Koa docs have examples and go more in depth on error handling*/
}
}
此外,您不必自己 运行(中间件)生成器,您也可以生成它们。这就是 Koa 的中间件链的全部内容
这是我找到的解决方案
var app = koa;
var foo = function(params) {
return function(callback) {
asyncFunc(params, function(err, result){
if (err) callback(err);
callback(null, result);
});
}
}
app.use(function *() {
var result;
try {
result = yield foo(params);
} catch {
result = null;
}
console.log(result);
});
我有这样的东西:
var app = koa;
var run = function (generator){
var it = generator(go);
function go(err, res) {
it.next(res);
}
go();
}
app.use(function *() {
run(function *(callback) {
var result = yield asyncFunc(params, callback);
});
//I want to get value of result here;
});
那么如何用Koa构思得到这个值呢?
要获取函数的值,只需将其包装在 Promise 中
app.use(function *(){
var promise = new Promise (function(resolve, reject){
asyncFunc(params, function(err, res){
if(err){reject(err)}
else{resolve(res)}
}
}
/*Added koa error handling example also*/
try {
var result = yield Promise
// do what you want with result
}
catch{
this.status = 500 // or 404, etc, whatever is appropriate
/* the Koa docs have examples and go more in depth on error handling*/
}
}
此外,您不必自己 运行(中间件)生成器,您也可以生成它们。这就是 Koa 的中间件链的全部内容
这是我找到的解决方案
var app = koa;
var foo = function(params) {
return function(callback) {
asyncFunc(params, function(err, result){
if (err) callback(err);
callback(null, result);
});
}
}
app.use(function *() {
var result;
try {
result = yield foo(params);
} catch {
result = null;
}
console.log(result);
});