繁体   English   中英

获取异步功能中的上一项

[英]Get previous item in async function

我有三个记录。 为了更新每条记录,我需要获取上一条记录的值。 问题是方法是异步记录时,记录三在记录二完成之前开始更新并获取null值。 我该如何处理?

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.allmap 只需编写一个普通的循环来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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM