Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何返回值到膝关节炎产生器?_Javascript_Node.js_Callback_Generator_Koa - Fatal编程技术网

Javascript 如何返回值到膝关节炎产生器?

Javascript 如何返回值到膝关节炎产生器?,javascript,node.js,callback,generator,koa,Javascript,Node.js,Callback,Generator,Koa,我有这样的想法: 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, callbac

我有这样的想法:

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概念获得这个值?

< P>获取函数的值,只要将它包在承诺< /P>
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);
});

这是什么
run
thingy?为什么要编写自己的函数而不是使用
co
?您将其包装在一个创建thunk的函数中(即返回一个带一个参数的函数:回调),这是因为
co
可以生成thunk。但我建议用承诺而不是恶作剧来包装它,因为这是一个更普遍的解决方案,而不是一个过时的共同特定的黑客。你问题的另一个答案说明了如何。