如何将 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.optionNamestring

我希望我的 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)
}