В вашем вопросе фраза "чем обновить ... состояние" является ключевой. Вы планируете обновить состояние таким образом, чтобы, как только одно обещание «выполнено», обновлялось состояние , соответствующее . Вы пробовали что-то вроде этого
async function f1(){ await Promise.resolve(); }
async funciton f2(){ await Promise.resolve(); }
async function fn(){ await Promise.resolve(); }
async function drvAsync(){
const [r1, r2, rn] = await Promise.all([f1(), f2(), fn()]);
u1(r1);
u2(r2);
un(rn);
}
, где f [n] - асинхронная бизнес-функция, а u [n] - метод для обработки результата, полученного в результате. Эта схема не приемлема в вашем сценарии. Возможно, fn завершается быстрее, чем другие, и вы хотите обновить N-е состояние раньше.
Я рекомендую вообще не использовать примитивы синхронизации. Вместо этого вы должны работать с результатами отдельно.
function drv(){
f1().then((r1)=>u1(r1)).catch((e)=>er(e));
f2().then((r2)=>u2(r2)).catch((e)=>er(e));
fn().then((rn)=>un(rn)).catch((e)=>er(e));;
}
Эта схема будет вызывать каждый метод обновления (u [n]), не ожидая результатов от других.