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来区分了