如何将 Promise 字符串值输入到对象中
How to input Promise string value into an object
在下面的代码中
const getOptionName = async(id): Promise<void> => {
const data = await dealStore.findById(id)
console.log('data.optionName', data.optionName)
console.log('typeof(data.optionName)', typeof(data.optionName))
return data.optionName
}
const openRemoveDialog = (): void => {
const checkedItems = grid1.current.getCustomCheckedList().map(item => {
return {
optionName: getOptionName(item.id),
channelName: item?.channelName,
name: item?.name,
id: item.id,
}
})
console.log('checkedItems', checkedItems)
}
我的console.log('data.optionName', data.optionName)
输出
data.optionName 딜 옵션명 테스트
我的console.log('typeof(data.optionName)', typeof (data.optionName))
输出
typeof(data.optionName) string
我的 console.log('checkedItems', checkedItems)
给出了以下输出
我很困惑为什么我的 optionName
值是 Promise
而不是字符串,而 console.log('typeof(data.optionName)', typeof (data.optionName))
告诉我 data.optionName
是 string
我希望我的 optionName
值为 string
而不是 Promise
。如何将 PromiseResult
string
值输入我的 optionName
?
如果可能,您应该更改您的 Promise 以请求 findByIds(ids: number[])
来获取匹配一组 ID 而不是一个单一 ID 的所有数据 - 这将减少网络调用的次数并删除 anti-pattern 在你的 map
闭包中做出承诺。
但是,如果您不想检索 optionName
的承诺,您还必须 await
该承诺的结果。
return await data.optionName;
getOptionName
是一个 async
函数,所以它将 return 一个承诺。要从该承诺中获得价值,您需要 await
它。为了 await
它,您的 map 函数需要是一个 async
函数,这意味着您正在创建一个承诺数组。然后,您可以使用 Promise.all
组合承诺数组,并使用 await
获得完成的对象数组。
const openRemoveDialog = async (): void => {
const promises = grid1.current.getCustomCheckedList().map(async (item) => {
return {
optionName: await getOptionName(item.id),
channelName: item?.channelName,
name: item?.name,
id: item.id,
}
})
const checkedItems = await Promise.all(promises);
console.log('checkedItems', checkedItems)
}
在下面的代码中
const getOptionName = async(id): Promise<void> => {
const data = await dealStore.findById(id)
console.log('data.optionName', data.optionName)
console.log('typeof(data.optionName)', typeof(data.optionName))
return data.optionName
}
const openRemoveDialog = (): void => {
const checkedItems = grid1.current.getCustomCheckedList().map(item => {
return {
optionName: getOptionName(item.id),
channelName: item?.channelName,
name: item?.name,
id: item.id,
}
})
console.log('checkedItems', checkedItems)
}
我的console.log('data.optionName', data.optionName)
输出
data.optionName 딜 옵션명 테스트
我的console.log('typeof(data.optionName)', typeof (data.optionName))
输出
typeof(data.optionName) string
我的 console.log('checkedItems', checkedItems)
给出了以下输出
我很困惑为什么我的 optionName
值是 Promise
而不是字符串,而 console.log('typeof(data.optionName)', typeof (data.optionName))
告诉我 data.optionName
是 string
我希望我的 optionName
值为 string
而不是 Promise
。如何将 PromiseResult
string
值输入我的 optionName
?
如果可能,您应该更改您的 Promise 以请求 findByIds(ids: number[])
来获取匹配一组 ID 而不是一个单一 ID 的所有数据 - 这将减少网络调用的次数并删除 anti-pattern 在你的 map
闭包中做出承诺。
但是,如果您不想检索 optionName
的承诺,您还必须 await
该承诺的结果。
return await data.optionName;
getOptionName
是一个 async
函数,所以它将 return 一个承诺。要从该承诺中获得价值,您需要 await
它。为了 await
它,您的 map 函数需要是一个 async
函数,这意味着您正在创建一个承诺数组。然后,您可以使用 Promise.all
组合承诺数组,并使用 await
获得完成的对象数组。
const openRemoveDialog = async (): void => {
const promises = grid1.current.getCustomCheckedList().map(async (item) => {
return {
optionName: await getOptionName(item.id),
channelName: item?.channelName,
name: item?.name,
id: item.id,
}
})
const checkedItems = await Promise.all(promises);
console.log('checkedItems', checkedItems)
}