【问题标题】:How to input Promise string value into an object如何将 Promise 字符串值输入到对象中
【发布时间】:2022-02-08 09:44:38
【问题描述】:

在下面的代码中

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) 给出以下输出

console.log('typeof(data.optionName)', typeof (data.optionName)) 显示data.optionNamestring 时,我很困惑为什么我的optionName 值是Promise 而不是字符串

我希望我的 optionName 值是 string 而不是 Promise。如何将PromiseResult string 值输入到我的optionName 中?

【问题讨论】:

    标签: javascript asynchronous async-await promise


    【解决方案1】:

    getOptionName 是一个async 函数,所以它会返回一个promise。要从该承诺中获得价值,您需要await 它。为了 await 它,您的 map 函数需要是 async 函数,这意味着您正在创建一个承诺数组。然后,您可以使用 Promise.all 来组合 promise 数组,并使用 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)
    }
    

    【讨论】:

      【解决方案2】:

      如果可能,您应该更改您的 Promise 以请求 findByIds(ids: number[]) 以获取与一组 ID 而不是单个 ID 匹配的所有数据 - 这将减少网络调用的数量并消除在您的内部做出 Promise 的反模式map 关闭。

      但是,如果您不想为 optionName 检索 Promise,您还必须为 await 检索该承诺的结果。

      return await data.optionName;
      

      【讨论】:

        猜你喜欢
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 2018-07-26
        • 2022-06-16
        • 2023-03-23
        • 2018-12-17
        • 2022-01-13
        相关资源
        最近更新 更多