我在高速公路上有一点经验。基本上,您使用req、res和next实现了一个函数。
function myMidWare (req, res, next) {
// do mid ware work
next() // call next to trigger next middleware
}稍后,我看到了使用nodejs 8为koa编写的代码。
下面是来自这里的一段代码:
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
// 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那里了解到*。函数*声明应该有‘产’关键字,但是在上面代码中的生成器函数定义中找不到‘产’关键字。
问题:
发布于 2017-08-15 20:28:36
使用新的等待语法,我们可以在中间停止函数执行,等待某些内容(例如,数据库调用),然后继续执行:
await dbcall();
await next();在预ES7异步代码中,回调和允诺地狱是唯一支持在中间产生生成器函数的东西。它创建了一种简单的方法来委派操作,并在它们完成时重新执行。一个小例子是:
function asy(func){
var gen = func();
(function next(v){
var res = gen.next(v);
res.value.then(v => res.done || next(v));
})();
}所以你可以:
asy(function* (){
var v = yield Promise.resolve("test");
console.log(v);
});对整个工作原理进行了深入的这里解释。
所以,最后要回答你的问题:如果函数不需要屈服,就不需要屈服;)
https://stackoverflow.com/questions/45700608
复制相似问题