typescript获取Promise.allSettled的值



我想在typescript代码中获得Promise allSettled结果的值。在JavaScript中,这一功能运行良好。

Promise.allSettled([
Promise.resolve(33),
new Promise(resolve => setTimeout(() => resolve(1000), 0)),
25000,
Promise.reject(new Error('failed!'))
])
.then(values => {
let allValues = values.filter(c=>c.status === 'fulfilled').map(v=>v.value);
console.log(allValues);
});

但是在打字中我找不到正确的语法。该项只有status,没有value属性。我正在使用最新版本的打字脚本3.9.7

好的,我终于找到了在typescript中使用Promise.allSettled的正确语法:

更新:感谢@myol,我更新了代码,没有不必要的映射:

const dummyResolve1 =  Promise.resolve(1000);
const dummyResolve2 = new Promise(resolve => setTimeout(() => resolve(2000), 0));
const dummyError = Promise.reject(new Error('failed'));
const dummyPromises = [dummyResolve1, dummyResolve1, dummyError];
Promise.allSettled(dummyPromises)
.then(results => {
const allValues = (results.filter(c=>c.status === 'fulfilled') as PromiseFulfilledResult<any>[])
.map(c=>c.value);
console.log(allValues);
const failedResults = 
(results.filter(c=>c.status === 'rejected') as PromiseRejectedResult[])
.map(c=>c.reason);

console.log(failedResults);
});

旧代码

Promise.allSettled([
Promise.resolve(1000),
new Promise(resolve => setTimeout(() => resolve(2000), 0)),
1500,
Promise.reject(new Error('failed'))
])
.then(values => {
let allValues = values.filter(c=>c.status === 'fulfilled').map(c=> <PromiseFulfilledResult<any>>c).map(c=>c.value);
console.log(allValues);
let failedResults =  values.filter(c=>c.status === 'rejected').map(c=> <PromiseRejectedResult>c).map(c=>c.reason);
console.log(failedResults);
});

我认为您确实想要以下内容;

const fulfilledValues: any[] = (values as PromiseFulfilledResult<any>[])
.filter(res => res.status === 'fulfilled')
.map(res => res.value);
console.log(fulfilledValues);
const rejectedReasons: any[] = (values as PromiseRejectedResult[])
.filter(res => res.status === 'rejected')
.map(res => res.reason);
console.log(rejectedReasons);

不需要额外的JS.map调用就可以在TS中使用类型断言。

最新更新