简体   繁体   English

如何从async.js系列返回结果

[英]How to return results from async.js series

Every example I see for async.js looks something like this: 我为async.js看到的每个示例都看起来像这样:

var async = require(“async”);
async.series([
  function(callback) {
    setTimeout(function() {
      console.log(“Task 1”);
      callback(null, 1);
    }, 300);
  },
  function(callback) {
    setTimeout(function() {
      console.log(“Task 2”);
      callback(null, 2);
    }, 200);
  },
  function(callback) {
    setTimeout(function() {
      console.log(“Task 3“);
      callback(null, 3);
    }, 100);
  }
], function(error, results) {
  console.log(results);
});

At the end they always just console.log the results. 最后,它们始终只是console.log结果。 But, how do you actually return the results. 但是,您实际上如何返回结果。 Every time I try it just comes back as undefined. 每次尝试时,它都会以未定义的形式返回。

I need something like this: 我需要这样的东西:

var async = require('async');

var handler = function()
{
  async.series([
  function(callback) {
    setTimeout(function() {
      console.log('Task 1');
      callback(null, 1);
    }, 300);
  },
  function(callback) {
    setTimeout(function() {
      console.log('Task 2');
      callback(null, 2);
    }, 200);
  },
  function(callback) {
    setTimeout(function() {
      console.log('Task 3');
      callback(null, 3);
    }, 100);
  }
  ], function(error, results) {
    return results;
  });
}

var result = handler();
console.log(result);

But this doesn't work, the result is always undefined. 但这是行不通的,结果始终是不确定的。

Ultimately I need to put this up on AWS Lambda and return the results with their context.succeed(results) call. 最终,我需要将其放在AWS Lambda上,并通过它们的context.succeed(results)调用返回结果。 But, I can never get the results. 但是,我永远无法获得结果。 I'm obviously not understanding something about this process, if someone could help it would be much appreciated, thanks! 我显然对这个过程不了解,如果有人可以帮助,将不胜感激,谢谢!

You can't return result from asynchronous call. 您无法从异步调用返回结果。 What you can do is pass the callback function and when result is available, call that callback function with result as a parameter. 您可以做的是传递回调函数,当结果可用时,以result为参数调用该回调函数。

var async = require('async');

var handler = function(cb)
{
  async.series([
  function(callback) {
    setTimeout(function() {
      console.log('Task 1');
      callback(null, 1);
    }, 300);
  },
  function(callback) {
    setTimeout(function() {
      console.log('Task 2');
      callback(null, 2);
    }, 200);
  },
  function(callback) {
    setTimeout(function() {
      console.log('Task 3');
      callback(null, 3);
    }, 100);
  }
  ], function(error, results) {
    cb(error, results)
  });
}

handler(function(err, results) {
  if(!err) {
    console.log(results);
  }
})

try this for async series module 试试这个异步系列模块

Details: function (req, res) {
    async.series([

    function functionOne(callback) {
            setTimeout(function(err, response) {
            console.log('Task 1');
            callback(null, 1);
            if (err) {
            return callback(err);
            }
            }, 300);
    },

    function functionTwo(callback) {
    setTimeout(function(err, response) {
            console.log('Task 2');
            callback(null, 2);
            if (err) {
            return callback(err);
            }
            }, 200);
    },

    function functionThree(callback) {
    setTimeout(function(err, response) {
            console.log('Task 3');
            callback(null, 3);
            if (err) {
            return callback(err);
            }
            }, 200);

    }
    ], function (err,res) {
    if (err) {
    return res.badRequest(err);
    }
    if (res) {
    return response;
    }

    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM