- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 async.eachLimit 时遇到问题。对于前 10 个元素它可以正常工作,但超过这个元素就不再有效;它就这样结束了。因此,如果有 100 个元素,它只会执行前 10 个元素。这显然是我对回调的误解。将eachLimit 与不包含回调的外部函数一起使用的正确方法是什么?或者说这样的功能是必须要有的吗?
async.eachLimit(items, 10, function(item, callback) {
outsideFunction(item.attrOne, item.attrTwo};
//callback(); ---> leads to all running in parallel.
},
function(err) {
console.log(err);
}
);
最佳答案
这里的问题是您正在使用异步库来实现非异步(或者表现得不像异步)的函数。 async.eachLimit
的作用是遍历数组中的每个项目,一次仅执行 limit
数量,并等待 callback()
被调用表示当前迭代已完成,可以添加另一个要执行的迭代。
在您的代码示例中,回调(未注释时)在尝试调用 outsideFunction
后立即被调用,因为函数调用是非阻塞的。它不会等待,因为 async 说“我被告知它已经完成,我将继续下一个”,因此所有 100 个将尝试同时执行。如果 outsideFunction
是一个异步函数,它需要一个回调(或者让它使用 Promise)来表示它已经完成执行,并且在该回调中您可以调用 的回调>async.eachLimit
然后它只会按照您想要的方式一次执行 10 次。这是一个例子:
async.eachLimit(items, 10, function(item, callback)
{
outsideFunction(item.attrOne, item.attrTwo, function(someResult)
{
// Your outside function calls back saying it's finished ...
callback(); // ... so we tell async we're done
});
},
function(err)
{
console.log(err);
});
如果 outsideFunction
不是您的函数,并且该函数实际上是异步的,那么它要么使用 Promise,要么您需要找到一个可以正确编写异步函数的库。如果该函数不是异步的,则 async.eachLimit
将不起作用。
如果这是你的函数,你应该让它发送回一个回调来表示它已经完成(或使用 Promise)。
关于javascript - 如何正确使用 Javascript 异步eachLimit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44813380/
我的 node.js 项目中包含以下代码。 async.eachLimit(dbresult, 1, function (record, callback) { var json = JSON.s
我有这样的aync代码 async.eachLimit(teams, 1000, fetchTeamInfo, exit) 我需要将其转换为 Promise (bluebird) 我认为做这样的事情会
我正在使用 npm 异步库 ( https://caolan.github.io/async/docs.html ) 来限制并行请求的数量。下面是我的代码: async.eachLimit(l
我写了一点async用于将大量 JSON 文件批量插入 MongoDB 分片集群的脚本。这是我第一次使用此模块(我仍在学习 Node.js)。我不知道我这样做对不对。 代码是 waterfall 的最
前几天我在阅读 Nodejs 脚本时遇到了这行代码: async.eachLimit(games, 1, handleSingleGame, callback) 我的问题是之前的调用与以下调用之间有什
在async ,如果我需要将异步函数应用于 1000 个项目,我可以这样做: async.mapLimit(items, 10, (item, callback) => { foo(item,
如果我使用这段代码: async.eachLimit(body.photos.photo, 10, function(photo) { var flickr_getphoto_pat
我是一名优秀的程序员,十分优秀!