刚学习nodejs的异步写法,请教一个问题
      
      
      
    
    我想执行2条数据库查询操作connection.query(selectSQL, function (err, re) {});,想在得到这两次查询结果后给客户端发送结果。现在的问题是查询方法都是异步的,不知道哪次查询先完成,哪次后完成。那么我需要怎么确认这两次查询都已经执行完,然后合并这两条查询结果再发送出去呢?
      10 回复
    
    
采用es6原生的promise写法:
    var promise1 = new Promise(function(resolve, reject){
        connection.query(selectSQL, function (err, re) {
            resolve(re);
        });
    });
    var promise2 = new Promise(function(resolve, reject){
        connection.query(selectSQL, function (err, re) {
            resolve(re);
        });
    });
    Promise.all([promise1, promise2]).then(function(result){
        // result[0]:第一个查询的结果
        // result[1]:第二个查询的结果
    });
其实方法很多。用async库/用6楼提供的方法也可以/用co库也可以。
co库的例子你可以参考下: 链接地址
'use strict';
co(function *() {
  let user = yield User.findOne({_id: id}).populate('posts').exec();
  let post = yield Post.find(user).populate(XXX).exec();
  let video = yield Video.find(post).populate(XXX).exec();
  // 这里你可以处理user,post,video
  res.render({
    user: user,
    post: post,
    video: video
  })
}).catch(function (err) {
  console.error(err.stack);
});
