gpt4 book ai didi

javascript - Async.forEach 并行运行,但它丢失了原始数组中的排序顺序

转载 作者:行者123 更新时间:2023-12-03 00:04:44 26 4
gpt4 key购买 nike

我正在尝试并行迭代一个集合,并且我使用了 async.forEach() ,但我也需要维护排序顺序。

async.forEach(books, function (book, bookCallback) {
findBook(account, userinfo, permission, function (error, foundBook) {
if (error) {
bookCallback(error);
} else if (foundBook) {
bookCallback(account);
bookCallback(null);
} else {
bookCallback(null);
}
});
}, function (err) {
if (err) {
callback(err, null);
} else {
callback(null, finaCallback);
}
});

我尝试过使用 async.map、async.groupBy,但即使它们也没有保持排序顺序。仅当我尝试 async.eachSeries 时,顺序才得到维护,但它没有并行运行。

最佳答案

你实际上想要async.parallel在这种情况下,但您基本上需要首先将输入转换为:

let tasks = [ ...accounts.entries() ].map(([k, account]) =>
({
[k]: (callback) => findbook(account, userinfo, permission, callback)
})
);

async.parallel(tasks, (err,results) => {
if (err) throw err; // error handling of some sort
// reconstruct array order by index position
results = accounts.map((e,i) => results[i])
})

或者,您可以使用 Promise 包装接受回调的方法并使用 Promise.all ,它平行于 respects the same order in results as the input used :

Promise.all(
accounts.map(account => new Promise((resolve,reject) =>
findbook(account, userinfo, permission, (err, result) => {
if (err) reject(err);
resolve(result)
})
))
).then(results => {
// results have original order
}).catch(err => console.error(err))

关于javascript - Async.forEach 并行运行,但它丢失了原始数组中的排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55016504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com