使用async/await和.reduce()似乎有一些型別問題
我必須使用適當的型別在 reduce 中呼叫一個異步函式,但我不知道為什么有人請幫助我
interface Person {
name: string;
age: number;
}
const persons: Person[] = [
{ name: 'John', age: 30 },
{ name: 'Alice', age: 45 },
];
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
const ageByPerson: Person[] = persons.reduce<Person[]>(
async (result, person) => {
await sleep(4000);
return result.concat({
age: person.age,
name: person.name,
});
},
[]
);
console.log('age ', ageByPerson);
沒有介面作業正常但是當我使用介面時我無法弄清楚
uj5u.com熱心網友回復:
由于回呼是異步的,它總是會回傳一個 Promise;型別引數不應該是Person[],但是Promise<Person[]>。您還需要傳遞這樣一個值作為初始值,并在連接之前等待先前的累加器決議。
const ageByPersonPromise = persons.reduce<Promise<Person[]>>(
async (resultPromise, person) => {
const result = await resultPromise;
await sleep(4000);
return result.concat({
age: person.age,
name: person.name,
});
},
Promise.resolve([])
);
ageByPersonPromise
.then((ageByPerson) => {
console.log('age ', ageByPerson);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430575.html
標籤:javascript 数组 异步 异步等待 减少
