async parallelLimit 只运行一次限制次数
async parallelLimit runs limit times only once
我正在尝试使用 async.parallelLimit 来更新我的数据库中的记录。我需要以 10 个为一组执行此操作,每次总记录为 1000。我试图了解如何在我的代码中使用此 asyn.parallelLimit。我查看了一些示例解释并进行了尝试,但它只 运行ning 了 10 次,在返回 10 个响应后,它没有给我下一个响应。我试图通过执行过滤器来查询数据库,然后将记录发送到 async.parallelLimit 并获得所有这些记录的响应。现在我只是想了解 parallelLimit 及其工作原理。这是我的代码
const async = require("async");
module.exports = async (server) => {
async function data(server) {
return await resolveData(server);
}
function resolveData(server) {
return new Promise((resolve) => {
let parcel = server.models["Parcel"].find({
order: "createdAt ASC",
include: [
{
relation: "parcelStatuses",
},
{
relation: "customerData",
scope: {
fields: ["firstName", "lastName", "cityId", "customerId"],
},
},
],
limit: 1000,
skip: 200,
});
resolve(parcel);
});
}
// console.log(await data(server));
var parcelData = await data(server);
for (var i = 1; i <= parcelData.length; i++) {
parcelData[i - 1] = (function (i) {
return function () {
console.log(i);
};
})(parcelData[i]);
}
async.parallelLimit(parcelData, 10, function (err, results) {
if (results) {
console.log("This is resilt", results);
} else {
console.log(err);
}
});
};
我需要我的 parallelLimit 函数来 return 我查询获取的记录。我稍后会 运行 更新命令。因为它 return 我只有 10 条记录,所以我想知道我做错了什么
我不确定 for loop
应该做什么。我猜您正在尝试为 parcelData
的每个元素创建函数。一种简单的方法是 map
覆盖 parcelData
和 return 一个异步函数:
let async = require("async");
// Your data is here but I used a dummy array with 100 elements
let parcelData = Array(100).fill(0).map((_, i) => i);
// Just a dummy function to wait
function delay(ms) {
return new Promise(r => setTimeout(r, ms));
}
// map over array and return an `async` function;
let tasks = parcelData.map(p => {
return async () => {
await delay(1000);
console.log(p);
}
});
// Finally execute the tasks
async.parallelLimit(tasks, 10, (err, result) => {
if (err) console.error('error: ', err)
else console.log('done');
});
我正在尝试使用 async.parallelLimit 来更新我的数据库中的记录。我需要以 10 个为一组执行此操作,每次总记录为 1000。我试图了解如何在我的代码中使用此 asyn.parallelLimit。我查看了一些示例解释并进行了尝试,但它只 运行ning 了 10 次,在返回 10 个响应后,它没有给我下一个响应。我试图通过执行过滤器来查询数据库,然后将记录发送到 async.parallelLimit 并获得所有这些记录的响应。现在我只是想了解 parallelLimit 及其工作原理。这是我的代码
const async = require("async");
module.exports = async (server) => {
async function data(server) {
return await resolveData(server);
}
function resolveData(server) {
return new Promise((resolve) => {
let parcel = server.models["Parcel"].find({
order: "createdAt ASC",
include: [
{
relation: "parcelStatuses",
},
{
relation: "customerData",
scope: {
fields: ["firstName", "lastName", "cityId", "customerId"],
},
},
],
limit: 1000,
skip: 200,
});
resolve(parcel);
});
}
// console.log(await data(server));
var parcelData = await data(server);
for (var i = 1; i <= parcelData.length; i++) {
parcelData[i - 1] = (function (i) {
return function () {
console.log(i);
};
})(parcelData[i]);
}
async.parallelLimit(parcelData, 10, function (err, results) {
if (results) {
console.log("This is resilt", results);
} else {
console.log(err);
}
});
};
我需要我的 parallelLimit 函数来 return 我查询获取的记录。我稍后会 运行 更新命令。因为它 return 我只有 10 条记录,所以我想知道我做错了什么
我不确定 for loop
应该做什么。我猜您正在尝试为 parcelData
的每个元素创建函数。一种简单的方法是 map
覆盖 parcelData
和 return 一个异步函数:
let async = require("async");
// Your data is here but I used a dummy array with 100 elements
let parcelData = Array(100).fill(0).map((_, i) => i);
// Just a dummy function to wait
function delay(ms) {
return new Promise(r => setTimeout(r, ms));
}
// map over array and return an `async` function;
let tasks = parcelData.map(p => {
return async () => {
await delay(1000);
console.log(p);
}
});
// Finally execute the tasks
async.parallelLimit(tasks, 10, (err, result) => {
if (err) console.error('error: ', err)
else console.log('done');
});