使用 node.js async forEachSeries 时是不是有“继续”的等效语句?

Posted

技术标签:

【中文标题】使用 node.js async forEachSeries 时是不是有“继续”的等效语句?【英文标题】:Is there an equivalent statement to 'continue' when using node.js async forEachSeries?使用 node.js async forEachSeries 时是否有“继续”的等效语句? 【发布时间】:2012-04-23 19:13:30 【问题描述】:

我正在使用 node.js 异步包,特别是 forEachSeries,根据从数组中提取的参数发出一系列 http 请求。在每个请求的回调中,我都有一些 if/else 语句来响应不同类型的响应。

// This is the callback of a GET request inside of a forEachSeries
function(error, response) 
    if (response.results) 
        // Do something with results
    
    else if (!response.results) 
        // Would like to use a continue statement here, but
        // this is not inside of a loop
    
    else 
        // Do something else
    

如果在上面,我可以在 else if 中使用与“继续”等效的方法吗?这在技术上不在循环内部,因此 continue 不起作用。

【问题讨论】:

您无法访问控制结构(如if/else)中的continue 语句是有原因的。你到底想做什么?因为在我看来你需要重新审视你的逻辑...... !response.results 很可能是由于服务器的某些速率限制。目前,我可以在上面的请求所在的 forEachSeries 上返回 callback(),但是这种方法可能会丢失一些数据。只是想弄清楚 node.js 中的 forEachSeries 中是否有等价的 continue 。类似于在 jQuery $each 中使用 return true 的方式。 【参考方案1】:

既然它只是一个函数,你应该可以从中 return 获得同样的效果:

else if (!response.results) 
    return;

【讨论】:

这就是我的想法,虽然上面的代码有点奇怪—— else 语句永远不会被命中,在这种情况下,一个简单的 if/else 就足够了,而且可能不需要continue 类型的流控制。 @Reid - 同意,尽管在更大的代码 sn-p 中可能更有意义,例如,如果 else if 中有另一个代码分支。 @Justin - 感谢您的回复。这并没有完全解决我的问题,但它是该问题的最简单解决方案,所以我接受了。我应该发布一个更大的 sn-p。 @ Reid - 感谢您的意见。是的,else 似乎永远不会命中,但还有另一种情况,既不是 response.results 也不是 !response.results。我对小sn-p的缺点。

以上是关于使用 node.js async forEachSeries 时是不是有“继续”的等效语句?的主要内容,如果未能解决你的问题,请参考以下文章

javascript node.js async-await electron

如何在 node.js 中将函数与 Promise 同步

Node.js 同步循环或迭代异步语句

Node.js - 使用 'async' 和 'await' 和 sequelize ORM

转学习使用 Node.js 中 async-hooks 模块

使用 node.js 函数 async.retry 确定成功/失败