现在有个需求,查一堆商品,每个商品都至少有一个图片,商品一个表,商品图片一个表
我是先查出所有商品的id和商品信息,然后再把id循环,每次循环再查商品id对应的图片
用的express,查询用连接池,即pool.getConnection里先connection.query,获得result数组[{id:1},{id:2},{id:3}],然后data = result,再
console.log(data) —1
for(var i=0;i<data.length;i++) {
connection.query(sql, data[i].id, function(err, resultImage) {
data[i][“image”] = resultImage
console.log(data) —2
});
}
console.log(data) —3
res.json(data)
每次循环根据商品id再查图片,再对data进行image:resultImage这样的json数据添加。循环后res.json(data)发送回前台
按道理说回去的data数据是[{id:1, image:},{id:2, image:},{id:3, image:}]这样包含 image信息的数据,
但是实际上却只有[{id:1},{id:2},{id:3}]这样的数据,也就是说在for循环之后data数据又变回去了
确实按上面的三个打印结果是console.log(data) --1和–3结果都是[{id:1},{id:2},{id:3}],
console.log(data) --2结果才是[{id:1, image:},{id:2, image:},{id:3, image:}]这种形式。
因为是node小白,所以问了别人,别人说这是因为node异步的原因,先跑耗时少的,所以先res.json(data)了
确实打印顺序是console.log(data) —3在console.log(data) —2前打印,然后用了async.whilst将其同步解决了
想问下是不是真的是异步的原因,然后还有没有其它的方法可以解决,或是res.json(data)放在哪个地方来保证所有代码跑完才执行它
可以用Promise,也可以用async/await,node解决异步的方式有很多的 学习Promise可以看这个:http://liubin.org/promises-book/ 学习Node.js可以看这个:https://cnodejs.org/topic/5ab3166be7b166bb7b9eccf7
@dingyuanwu 好的我看看
不建议子查询