Javascript 获取异步函数中的上一项

Javascript 获取异步函数中的上一项,javascript,asynchronous,async-await,synchronous,Javascript,Asynchronous,Async Await,Synchronous,我有三张唱片。为了更新每条记录,我需要取上一条记录的值。问题是,当方法为异步时,记录三在记录二完成之前开始更新,并获得null值。我该怎么办 const resolvePersons = async (persons) => { return Promise.all(persons.map(async (person) => { const data = await getSomePersonData(person); const valu

我有三张唱片。为了更新每条记录,我需要取上一条记录的值。问题是,当方法为异步时,记录三在记录二完成之前开始更新,并获得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.all
map
。只需编写一个正常的循环,
等待
s某事:

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;
}

如何在异步函数外使用wait?您不能。为什么要这样做?在非异步中使用waitmethod@TeodorKolev
resolvePersons
被声明为一个
异步函数
,循环中的
等待
正是顺序处理所需要的。是什么让你觉得这不是一个好主意?@TeodorKolev这条规则引起了太多的混乱,他们宁愿放弃它。太多的人把它看得太严肃了,而不是友好的暗示。它不适用于您的情况:。