今天突然想起来,Koa2.0这种Promise.resolve嵌套的方式类似递归,不知道在中间件数量比较庞大的时候会不会造成栈溢出,虽然比较罕见,测试代码如下:
'use strict';
const compose = require('koa-compose');
let middlewares = [];
for (let i = 0; i < 10000; i++) {
middlewares.push(function (ctx, next) {
return next();
});
}
compose(middlewares)({}).then(data=>console.log(data)).catch(err=>console.error(err));
结果
//在compose的return dispatch(i+1)处打印了 console.log(i+1)
4826
4827
4828
4829
[RangeError: Maximum call stack size exceeded]
在运行到5000左右的时候居然真的栈溢出了.... 好吧,虽然一个项目使用到5k的中间件相当罕见,但是说明还是有这个隐患点的....尤其是如果在中间件里面又进行了一些递归操作的话