如何从异步.js系列返回结果

How to return results from async.js series

本文关键字:系列 返回 结果 js 异步      更新时间:2023-09-26

我看到的每个异步示例.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);
});

最后,他们总是只是安慰.log结果。但是,您如何实际返回结果。每次我尝试时,它都会返回为未定义。

我需要这样的东西:

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);

但这行不通,结果总是不确定的。

最终,我需要将其放在 AWS Lambda 上,并返回结果及其上下文.success(results) 调用。但是,我永远无法得到结果。我显然不了解这个过程,如果有人能帮忙,将不胜感激,谢谢!

不能从异步调用返回结果。您可以做的是传递回调函数,当结果可用时,使用结果作为参数调用该回调函数。

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);
  }
})

为异步系列模块尝试此操作

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;
    }
    });
}