Node.Js 中的异步问题 - 如何执行一系列操作? [复制]

Posted

技术标签:

【中文标题】Node.Js 中的异步问题 - 如何执行一系列操作? [复制]【英文标题】:Async problems in Node.Js - how to perform a sequence of actions? [duplicate] 【发布时间】:2014-07-14 16:36:59 【问题描述】:

我需要对一个变量执行一系列操作,其中上一个操作的输出将是下一个操作的输入。

此外,如果输入格式不正确,则可能在每个步骤中整个过程中止。

我知道这可以通过回调函数来完成,但是我有太多的步骤会变得一团糟。

有没有人知道我可以使用一个好的解决方案来避免这种情况?只是一个模块,它有助于按顺序执行操作?还是其他技术?

谢谢!

【问题讨论】:

我认为你应该改变你所采取的方法并考虑到 Node 异步模型来解决它 Q 可能有帮助 github.com/kriskowal/q @Dalorzo 你有什么建议?使用承诺?有 10 个步骤的嵌套函数? 【参考方案1】:

听起来async.waterfall 可能就是您要找的东西。

就提前中止而言,async 没有简单的方法来做到这一点,但我通常所做的是使用“假”错误实例调用回调,然后在最终回调中,我检查“假”错误与真实错误(通常我会添加一些属性,例如 'err.abort = true;` 并检查)。

【讨论】:

你是我的救星!非常感谢,@mscdex。我已经和它战斗了 12 个小时,你的建议就像魔法一样奏效!【参考方案2】:

如果您使用Async.js。您可以使用async.whilst 或async.until

var count = 0;

async.whilst(
    function ()  return count < 5; ,
    function (callback) 
        count++;
        setTimeout(callback, 1000);
    ,
    function (err) 
        // 5 seconds have passed
    
);

第一个函数用于条件检查。第二个函数实际上是逻辑,你可以保存结果并将其重新用作新的输入。

【讨论】:

感谢您的建议。虽然它不能满足我的需要,但对于代码的另一部分来说这是一个非常好的主意。

以上是关于Node.Js 中的异步问题 - 如何执行一系列操作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Node.js中的异步I/O是如何进行的?

node.js 系列 7 异步IO

如何遍历 node.js 中的一系列承诺?

node.js 在执行'n'异步回调后执行函数

node.js 中的 foreach 异步函数

node.js 如何决定一个语句是不是被异步处理?