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

标签 javascript node.js aws-lambda async.js

我看到的每个 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);
});

最后他们总是只是控制台记录结果。但是,您实际上如何返回结果。每次我尝试它都会返回未定义的状态。

我需要这样的东西:

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 上,并通过他们的 context.succeed(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);
  }
})

关于javascript - 如何从 async.js 系列返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36011921/

相关文章:

node.js - 使用自定义 SSL 证书在 Openshift 中进行 SSL 客户端身份验证

node.js - Gcloud 上的 Meteor react

amazon-s3 - 使用Chalice Framework AWS读取S3文件内容失败

javascript - WebRTC Chrome 相机限制

javascript - 用输出参数包装一个 c++ 函数,以便在 javascript/node 中使用

javascript - 从 JS 中的构造函数返回 this

node.js - Passport.js 在实时生产服务器期间无法存储 session

java - 使用java将帧写入kinesis视频流

aws-lambda - 根据分支在 serverless 上选择不同的区域

javascript - 无法在 heroku 上推送 node.js 应用程序