在回调函数中使用局部变量

叶夫根尼

我的目标是按顺序执行一些javascript函数,其中一个函数的结果经常(但不总是)用作另一个函数的参数。

var async = require('async');

var commonFunction1 = function(arg1, arg2, callback) { // callback(err, res1, res2)
  callback(null, arg1 + arg2, 11);
}

var commonFunction2 = function(arg3, arg4, callback) { // callbackb(err, res3, res4)
  callback(null, arg3 + arg4, 90);
}

var argument1 = 1,
    argument2 = 2,
    result1,
    result2,
    result3,
    result4;

async.series({
  1: function(cb) {
    commonFunction1(argument1, argument2, function(err, res1, res2) {
      result1 = res1;
      result2 = res2;
      cb(err);
    });
  },
  2: function(cb) {
    commonFunction2(result1, result2, function(err, res3, res4) {
      result3 = res3;
      result4 = res4;
      cb(err);
    });
  },
}, function(err, results) {
  console.log(err, result1, result2, result3, result4);
});

如您所见,类似的语句result1 = res1是强制语法糖。

有没有更好的方法来链接局部变量和回调函数参数?

PS闭包是不是我的方式,因为我计划迁移commonFunction1commonFunction2到另一个模块。

MPM

按预期使用系列,仅将一个结果传递给下一个回调:

async.series([function(next) {
        commonFunction1(argument1, argument2, function(err, res1, res2) {
          next(err,{result1:res1,result2:res2});
        });
      ,
      function(next) {
        commonFunction2(result1, result2, function(err, res3, res4) {
          next(err,{result3:res3,result4:res4});
        });
      }],function(err,results){
             var finalObject= results.reduce(function(res,next){
                 Object.keys(next).forEach(function(k){
                    res[k]=next[k];
                 });
                 return res;
             },{});
             console.log(finalObject);
      });

我建议您更好地构建commFunctions并返回带有属性的对象,而不是将2结果与错误一起传递。

var commonFunction1 = function(arg1, arg2, callback) { // callback(err, res1, res2)
  callback(err, {prop1:arg1 + arg2, prop2:11} );
}

这是nodejs中的最佳实践,只需查看异步核心功能,即可使您的代码更易于使用。这样,您就不必在最终的async.series回调中编写所有reduce代码,只需使用结果数组即可。

编辑:如我的评论所述,async.waterfall会更好地适合您的用例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在回调函数中访问局部变量

来自分类Dev

如何在Bash函数中使用局部变量

来自分类Dev

如何在获取调用函数返回的内容时将局部变量传递给回调?

来自分类Dev

如何在Java / Android中的回调函数中设置局部变量?

来自分类Dev

Javascript:如何在回调函数中访问局部变量?

来自分类Dev

局部变量在javascript的回调函数中变为未定义

来自分类Dev

是否可以从 C++ 中的回调函数影响局部变量?

来自分类Dev

在actionlistener中使用非局部变量

来自分类Dev

在函数之外使用局部变量

来自分类Dev

在函数之外使用局部变量

来自分类Dev

使用局部变量更新函数

来自分类Dev

如何使用Ruby在主程序中的函数中使用局部变量?

来自分类Dev

如何在imagesLoaded回调函数中使用变量?

来自分类Dev

在Laravel回调中使用匿名PHP函数作为变量

来自分类Dev

如何在C中的另一个函数中使用局部变量的值

来自分类Dev

如何在其他函数烧瓶中使用局部变量?

来自分类Dev

d3(或JavaScript):在另一个函数中使用局部变量

来自分类Dev

Python:在另一个函数中使用局部变量

来自分类Dev

Lua - 如何在函数中使用局部变量(图像 URL)来打印图像 (loadRemoteImage)?

来自分类Dev

访问函数局部变量

来自分类Dev

为什么局部变量只有当它是父函数的输入参数时才能在回调函数中访问?

来自分类Dev

是否可以在特质实现中使用局部变量?

来自分类Dev

是否可以在Node中使用“线程”局部变量?

来自分类Dev

在条目标签中使用统计局部变量?

来自分类Dev

node.js在导入中使用局部变量

来自分类Dev

在远程命令中使用局部变量的问题

来自分类Dev

在define_method中使用局部变量

来自分类Dev

在子元素中使用ngFor的局部变量

来自分类Dev

我可以在testCafe中使用局部变量吗?

Related 相关文章

  1. 1

    在回调函数中访问局部变量

  2. 2

    如何在Bash函数中使用局部变量

  3. 3

    如何在获取调用函数返回的内容时将局部变量传递给回调?

  4. 4

    如何在Java / Android中的回调函数中设置局部变量?

  5. 5

    Javascript:如何在回调函数中访问局部变量?

  6. 6

    局部变量在javascript的回调函数中变为未定义

  7. 7

    是否可以从 C++ 中的回调函数影响局部变量?

  8. 8

    在actionlistener中使用非局部变量

  9. 9

    在函数之外使用局部变量

  10. 10

    在函数之外使用局部变量

  11. 11

    使用局部变量更新函数

  12. 12

    如何使用Ruby在主程序中的函数中使用局部变量?

  13. 13

    如何在imagesLoaded回调函数中使用变量?

  14. 14

    在Laravel回调中使用匿名PHP函数作为变量

  15. 15

    如何在C中的另一个函数中使用局部变量的值

  16. 16

    如何在其他函数烧瓶中使用局部变量?

  17. 17

    d3(或JavaScript):在另一个函数中使用局部变量

  18. 18

    Python:在另一个函数中使用局部变量

  19. 19

    Lua - 如何在函数中使用局部变量(图像 URL)来打印图像 (loadRemoteImage)?

  20. 20

    访问函数局部变量

  21. 21

    为什么局部变量只有当它是父函数的输入参数时才能在回调函数中访问?

  22. 22

    是否可以在特质实现中使用局部变量?

  23. 23

    是否可以在Node中使用“线程”局部变量?

  24. 24

    在条目标签中使用统计局部变量?

  25. 25

    node.js在导入中使用局部变量

  26. 26

    在远程命令中使用局部变量的问题

  27. 27

    在define_method中使用局部变量

  28. 28

    在子元素中使用ngFor的局部变量

  29. 29

    我可以在testCafe中使用局部变量吗?

热门标签

归档