想通过underscore的map函数进行拼接,处理好之后合成一个总的json送到前台取,但是会遇到异步的问题,没等执行完毕,一开始设置的空json就送出去了,想问下究竟该怎么办。
1.callback嵌套 2.async库 3.Promise 4.原生async/await 5…
查询返回的应该是 Promise 吧 ? 把所有的 Promise 放进一个数组里。 然后用 Promise.all() Promise.all
Promise.all()
举个简单例子
async () => { const [result1, result2] = await Promise.all([ 查询1, 查询2 ]) //处理result1, result2 }
async (req, res, next) => { let user = User.findOne({ where: { // } }); let admin = Admin.findOne({ where: { // } }); let results = await Promise.all([user, admin]) }
async.map()
感谢各位回答 暂时用promise解决了问题 但是对于node.js的循环异步问题 有没有更加优美的解决方案呢 比如我需要用循环处理一个json对象 如何才能等循环处理完毕之后再输出呢
@Masterlu1998 异步代码中循环的处理跟同步代码的思维是不一样的,循环中涉及io的部分应该分离出来,而不是像同步代码中和对io结果的处理放在同一个循环里,这样做也才能最大化的利用异步io的高效特性。
@Covertness 方便的话 能具体说一下 要怎么分离吗 异步编程没有系统的学过 可能基础不到位
@Masterlu1998 抱歉那么久才回。就拿你的问题来说吧,“查询多次mysql数据库”与“把搜索结果拼成一个json”就可以分为俩部分来写,查询过程都是io操作,等待所有io完成之后再对结果进行处理拼接成一个json。
mark
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
1.callback嵌套 2.async库 3.Promise 4.原生async/await 5…
查询返回的应该是 Promise 吧 ? 把所有的 Promise 放进一个数组里。 然后用
Promise.all()Promise.all举个简单例子
async.map()感谢各位回答 暂时用promise解决了问题 但是对于node.js的循环异步问题 有没有更加优美的解决方案呢 比如我需要用循环处理一个json对象 如何才能等循环处理完毕之后再输出呢
@Masterlu1998 异步代码中循环的处理跟同步代码的思维是不一样的,循环中涉及io的部分应该分离出来,而不是像同步代码中和对io结果的处理放在同一个循环里,这样做也才能最大化的利用异步io的高效特性。
@Covertness 方便的话 能具体说一下 要怎么分离吗 异步编程没有系统的学过 可能基础不到位
@Masterlu1998 抱歉那么久才回。就拿你的问题来说吧,“查询多次mysql数据库”与“把搜索结果拼成一个json”就可以分为俩部分来写,查询过程都是io操作,等待所有io完成之后再对结果进行处理拼接成一个json。
mark