打字稿数组减少 async/await 显示类型不匹配错误
Typescript array reduce with async/await showing type mismatch error
使用 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);
没有界面可以正常工作但是当我使用界面时我无法弄清楚
由于回调是异步的,它总是return一个Promise;类型参数不应为 Person[]
,而应为 Promise<Person[]>
。还需要传入这样一个值作为初始值,等待前面的累加器解析完再进行concating。
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);
});
使用 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);
没有界面可以正常工作但是当我使用界面时我无法弄清楚
由于回调是异步的,它总是return一个Promise;类型参数不应为 Person[]
,而应为 Promise<Person[]>
。还需要传入这样一个值作为初始值,等待前面的累加器解析完再进行concating。
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);
});