首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用异步运行多个异步筛选函数

使用异步运行多个异步筛选函数
EN

Stack Overflow用户
提问于 2015-06-23 09:40:28
回答 1查看 308关注 0票数 1

我有一堆有签名的函数:

代码语言:javascript
复制
var plugins = [
  function f1( fileData, fileInfo, cb ){
    /* Manipulate fileData */
    fileData += "f1 ran! ";
    cb( null, fileData );
  },

  function f2( fileData, fileInfo, cb ){
    /* Manipulate fileData */
     fileData += "f2 ran! ";
    cb( null, fileData );
  }
];

我想按顺序运行所有这些程序,并得到最终结果。

目前,我正在使用async.waterfall

代码语言:javascript
复制
var async = require( 'async');

var pluginsWithStarter = [ function( cb ){
  return cb( null, fileData, fileInfo );
} ].concat( plugins );

var fileData = "Some example data";
var fileInfo = 

async.waterfall( pluginsWithStarter, function( err, fileData, fileInfo){
  if( err ) return cb( err );

  console.log("RESULT: ");
  console.log( fileData );
  console.log( fileInfo );

  cb( null );
});

请注意,使用此方法,插件被迫使用两个参数:return cb( null, fileData, fileInfo );调用回调。

基本上,我在瀑布上附加了一个“启动”函数,它将与两个初始参数一起运行--所有其他函数都将处理和返回这些参数。

问题:

( 1)这是使用async.waterfall的好方法吗?我希望它本身能够获得第一个参数,如:async.waterfall( pluginsWithStarter, fileData, fileInfo, function( err, fileData, fileInfo){,但是,不,您必须有一个不接受参数的第一个函数,然后用几个参数返回回调。

2)通过这种方式,我不得不让每个函数都返回这两个值,这有点不太好。如何更改代码,使插件只需使用一个参数调用回调?

EN

回答 1

Stack Overflow用户

发布于 2015-06-28 05:04:06

GitHub上的异步票据 (我在三天后打开它)

他说:是的,这是一个使用瀑布的好方法--第一个函数是一个简单的函数,可以设置参数。另一种选择是执行类似plugins[0] = plugins[0].bind(null, fileData, fileInfo);的操作,以部分应用第一个函数。

我还考虑将acomb.constant添加到异步,以便简化第一个函数的创建:

代码语言:javascript
复制
var pluginsWithStarter = [async.constant(fileData, fileInfo)].concat(plugins);

好的。

他说:我听说你必须把所有的东西都通过瀑布。您可以将变量放入父闭包作用域中,以避免手动通过瀑布传递所有内容。您还可以查看async.auto来管理异步工作流中的许多变量。它的界面有点奇怪,我承认.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30999229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档