获取异步函数中的上一个项目
Get previous item in async function
我有3条记录。为了更新每条记录,我需要获取以前记录的值。问题是当方法是异步记录三开始更新之前记录二完成并获取空值。我该如何处理?
const resolvePersons = async (persons) => {
return Promise.all(persons.map(async (person) => {
const data = await getSomePersonData(person);
const value = await getValue(persons); // first person value is statically set
return { data, value };
}));
};
function getSomePersonData(person) {
return new Promise((resolve, reject) => setTimeout(() => resolve({data: someData}), 100);
}
function getValue(persons) {
return new Promise((resolve, reject) => setTimeout(() => resolve(persons[index - 1].value), 100);
}
如果您不希望迭代 运行 并发,请不要使用 Promise.all
和 map
。只需编写一个 await
的普通循环即可:
async function resolvePersons(persons) {
const result = [];
for (const [i, person] of persons.entries()) {
const data = await getSomePersonData(person);
const prevValue = i == 0 ? null : result[i-1].value;
const value = await getValue(prevValue);
result.push({ data, value });
}
return result;
}
我有3条记录。为了更新每条记录,我需要获取以前记录的值。问题是当方法是异步记录三开始更新之前记录二完成并获取空值。我该如何处理?
const resolvePersons = async (persons) => {
return Promise.all(persons.map(async (person) => {
const data = await getSomePersonData(person);
const value = await getValue(persons); // first person value is statically set
return { data, value };
}));
};
function getSomePersonData(person) {
return new Promise((resolve, reject) => setTimeout(() => resolve({data: someData}), 100);
}
function getValue(persons) {
return new Promise((resolve, reject) => setTimeout(() => resolve(persons[index - 1].value), 100);
}
如果您不希望迭代 运行 并发,请不要使用 Promise.all
和 map
。只需编写一个 await
的普通循环即可:
async function resolvePersons(persons) {
const result = [];
for (const [i, person] of persons.entries()) {
const data = await getSomePersonData(person);
const prevValue = i == 0 ? null : result[i-1].value;
const value = await getValue(prevValue);
result.push({ data, value });
}
return result;
}