标记了一个我无法理解要放置什么类型的地方,因为在 Promise.all 类型中有几个可能的返回选项 TUser 或 TAddress 或同时返回两者或 null
我很乐意对代码发表评论
type TUser = {
name: 'a',
surname: 'b'
}
type TAddress = {
address: 'x'
}
const getList = async (resource: string, params: GetListParams) => {
const finishedResult = {
data: [],
total: 0,
};
const {body: { result, totalCount }} = await CustomerService.getCustomerPage()
finishedResult.total = totalCount
//вот тут каким будет возвращаемый тип?
const promises = result.map(({addressId, userId}):какой возвращаемый тип? => {
if(!addressId && !userId) {
return null
}
if(addressId && userId) {
return Promise.all([
UserService.getUserById(userId),
AddressService.getAddressById(addressId)
])
}
if(!addressId) {
return Promise.all([UserService.getUserById(userId)])
}
if(!userId) {
return Promise.all([AddressService.getAddressById(addressId)])
}
})
promises.filter(e => e !== null)
//вид данных внизу
const res = await Promise.all(promises)
res.forEach(arr => {
let finalRes = {}
arr.forEach(({status, body}) => {
if(status === 'success'){
finalRes = {...finalRes,...body}
}
})
if(isObjectWithProperties(finalRes)){
finishedResult.data.push(finalRes)
}
})
return Promise.resolve(finishedResult);
}
资源中的数据
const res = [
[
{
status: '',
body: {}
},
{
status: '',
body: {}
},
],
[
{
status: '',
body: {}
},
{
status: '',
body: {}
},
],
]
通过代码 - 为什么要干扰 Promise 和 async\await?使用一个。
您可以将类型指定为
Promise<(TUser | TAddress)[] | null>
。或者,更准确地说Promise<[TUser | TAddress, TUser | TAddress] | null>
https://www.typescriptlang.org/play?#code/AQ4FwTwBwU2AVAqgZxgJ2AXmAbwFCiHAB2AhgLYwBcwA5KbQDQFEjICuaZlNtARrRYgAvniHhoceAEEAJrLQxkyLLnGFS8xct4APQYVHiAxgHtiyMMABm7YsdWlkEe8AAUASioAFNKfIAlqgAPG5IqBgAPghyCkrIHgDaALrA0cTsADaZAHyYORnZANziAH7ATi4OtvZgAeae+IRmFlbajgDupAFWNcaeJYYDQA