【已解决】router中next的异步调用问题
发布于 10 年前 作者 kakanjau 4010 次浏览 最后一次编辑是 8 年前

LZ是初学者,最近在router的代码中遇到如下的异步加载问题,希望高手来指导一下: 我的代码如下:

// 加载侧边栏
router.get(/^\/blog[\/]?/, blog.aside);
// 加载导航栏(mongoose异步查询获取)
router.get(/^\/blog[\/]?/, blog.header);
// 加载文章列表,加载完成后,执行`res.render`渲染
router.get('/blog/bloglist/:blogCategory?', blog.list);
router.get('/blog/detail/:blogCategory?/:_id', blog.detail);

由于导航栏是异步加载的,在代码执行中,可能会先执行router.get(/^\/blog[\/]?/, blog.header);的next,出现在blog.list执行完成并已经开始jade渲染的时候,导航栏的callback还没有返回,最终导致页面不显示导航栏内容。


###这里是解决方案### 很简单,对next()的理解不透彻。以为只能return next()。只需要将 blog.header中的return next()删除,在callback执行完成的地方,去调用next()就可以了

next执行的时候,可以根据callback的情况进行控制吗? 如果是利用step或者Async来控制,感觉就应该放到一个路由中,而不应该通过next来区分了

回到顶部