首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么koa使用生成器作为中间件,而不使用“产”关键字?

为什么koa使用生成器作为中间件,而不使用“产”关键字?
EN

Stack Overflow用户
提问于 2017-08-15 20:00:27
回答 1查看 599关注 0票数 0

我在高速公路上有一点经验。基本上,您使用req、res和next实现了一个函数。

代码语言:javascript
复制
function myMidWare (req, res, next) {
   // do mid ware work

  next() // call next to trigger next middleware 
}

稍后,我看到了使用nodejs 8为koa编写的代码。

下面是来自这里的一段代码:

代码语言:javascript
复制
var sha1 = require('sha1');
// define a Koa middle ware
module.exports = function(opts){
    return function *(next){
        var token = opts.token;
        var signature = this.query.signature;
        var nonce = this.query.nonce;
        var timestamp = this.query.timestamp;
        var echostr = this.query.echostr;
        var str = [token,timestamp,nonce].sort().join('');
        var sha = sha1(str);
        this.body = (sha === signature) ? echostr + '' : 'failed';
    };
}

下面是使用上面定义的Koa中间软件的app.js

代码语言:javascript
复制
// app.js - using the Koa middle ware
'use strict'

var Koa = require('koa');
var wechat = require('./wechat/generator');

var config = {
    wechat:{
        appID:'...',
        appSecret:'...',
        token:'...'
    }
};

var app = new Koa();
app.use(wechat(config.wechat));
app.listen(8080);

然后,我从MDN那里了解到*。函数*声明应该有‘产’关键字,但是在上面代码中的生成器函数定义中找不到‘产’关键字。

问题:

  1. 为什么他们定义了一个生成器函数而没有“产生”关键字?
  2. 如何利用生成器函数控制中间件的执行顺序?
EN

回答 1

Stack Overflow用户

发布于 2017-08-15 20:28:36

使用新的等待语法,我们可以在中间停止函数执行,等待某些内容(例如,数据库调用),然后继续执行:

代码语言:javascript
复制
await dbcall();
await next();

在预ES7异步代码中,回调和允诺地狱是唯一支持在中间产生生成器函数的东西。它创建了一种简单的方法来委派操作,并在它们完成时重新执行。一个小例子是:

代码语言:javascript
复制
function asy(func){
  var gen = func();
 (function next(v){
   var res = gen.next(v);
  res.value.then(v => res.done || next(v));
 })();
}

所以你可以:

代码语言:javascript
复制
asy(function* (){
  var v = yield Promise.resolve("test");
  console.log(v);
});

对整个工作原理进行了深入的这里解释。

所以,最后要回答你的问题:如果函数不需要屈服,就不需要屈服;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45700608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档