与knexjs的异步系列

时间:2016-03-22 21:27:27

标签: node.js asynchronous

有没有办法可以在异步响应中的对象中存储回调数据?

例如,在下面的示例中,我需要通过数组索引(response[0], response[1]等)访问对象。但我希望像response.user_employedresponse.user_employed一样访问它。我的代码如下。提前谢谢!

async.waterfall(
    [

        function uno(callback) {
            knex('user').where({
                employed: true
            }).then(function(data) {
                callback(data);
            }).catch(function(error) {
                console.log('error: ' + error);
            });
        },

        function dos(callback) {


            knex('user').where({
                employed: false
            }).then(function(data) {
                callback(data);
            }).catch(function(error) {
                console.log('error: ' + error);
            });
        }],

        function(err, response) {

            console.log(response[0]); // returns data from function uno
            console.log(response[1]); // returns data from function dos

        }   
);

1 个答案:

答案 0 :(得分:1)

你需要

parallel或series

async.parallel([
function(callback){
        knex('user').where({
            employed: true
        }).then(function(data) {
            callback(data);
        }).catch(function(error) {
            console.log('error: ' + error);
        });
},
function(callback){
        knex('user').where({
            employed: false
        }).then(function(data) {
            callback(data);
        }).catch(function(error) {
            console.log('error: ' + error);
        });
   }
],
// optional callback
function(err, results){
     console.log(response[0]); // returns data from function 1
     console.log(response[1]); // returns data from function 2
});

async.series({
  employed:     function(callback){
        knex('user').where({
            employed: true
        }).then(function(data) {
            callback(data);
        }).catch(function(error) {
            console.log('error: ' + error);
        });
  },
  umemployed:  function(callback){
        knex('user').where({
            employed: false
        }).then(function(data) {
            callback(data);
        }).catch(function(error) {
            console.log('error: ' + error);
        });
  }
 },
 function(err, results) {
  console.log(results.employed);
  console.log(results.unemployed);

});