首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Async.js设计模式

Async.js设计模式
EN

Stack Overflow用户
提问于 2016-06-22 17:53:39
回答 2查看 243关注 0票数 4

我正在为我的node.js应用程序使用async.js。我需要帮助解决以下问题。

假设我有一个下面的aysnc js系列函数。

代码语言:javascript
复制
async.waterfall([
    function getDataFromDB(request, response, callback){ ... },
    function someOperationOnDBData(dbData, response, callback){ ... },
    function renderSomeFlow(evaluatedData, response, callback){ ... }
]);

我按照上面提到的顺序调用了三个函数。我从getDataFromDB获取数据并传递给someOperationOnDBData,依此类推。

假设我在getDataFromDBsomeOperationOnDBData之间还需要一个操作,但仍然向前传递DBData。例如:

代码语言:javascript
复制
async.waterfall([
    function getDataFromDB(request, response, callback){ ... },
    function extraOperation(dbData, response, callback) {...}
    function someOperationOnDBData(dbData, extraOperationData, response, callback){ ... },
    function renderSomeFlow(evaluatedData, response, callback){ ... }
]);

在这里,在中间添加一个步骤将更改函数定义,而且我还需要在extraOperation中传递dbData,以便将其转发给someOperationOnDBData。此外,如果我在中间调用一个不同的模块,可能无法更改它的参数来转发某些数据。

如何解决在async.js中的函数之间传递数据而不在中间函数中转发数据的问题?每次包含新步骤时都重构函数是不可能的。解决这类问题的设计模式是什么?

EN

回答 2

Stack Overflow用户

发布于 2016-06-22 17:57:54

使用waterfall,您必须传递数据-您不能在中间停止瀑布:)。您可能希望使用其他方法,例如auto,它允许您指定哪些函数依赖于其他函数的结果,而async将确定它们的最佳运行顺序。

我发现auto的语法有点笨拙,但它可以满足您的需要。下面是一个示例:

代码语言:javascript
复制
async.auto({
    db: function getDataFromDB(callback){ ... },
    extra: ['db', function extraOperation(results, callback) {...}],
    some: ['db', function someOperationOnDBData(results, callback){ ... }],
    render: ['some', 'db', function renderSomeFlow(results, callback){ ... }]
});
票数 4
EN

Stack Overflow用户

发布于 2017-11-23 22:16:38

我发现让你的函数使用箭头函数是解决这个问题的一种方法:

代码语言:javascript
复制
const someOperationOnDBData = extraOperationData => (dbData, response, callback) => {
  // do your function work
};

async.waterfall([
  function getDataFromDB(request, response, callback){ ... },
  function extraOperation(dbData, response, callback) {...}
  someOperationOnDBData(extraOperationData)(dbData, response, callback),
  function renderSomeFlow(evaluatedData, response, callback){ ... }
]);

关于如何在Medium.com上编写javascript函数的许多好例子

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

https://stackoverflow.com/questions/37964527

复制
相关文章

相似问题

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