функция async await возвращает обещание вместо строки

#javascript #reactjs #async-await

#javascript #reactjs #async-await

Вопрос:

Я новичок в javascript, здесь у меня есть следующее graphql

  getId = async dataId => {
    let finalData = await apolloClient.query({
      query: GET_DOOR_ORDER,
      variables: {
        Id: dataId
      }
    })

    return finalData?.value
  }
  

Теперь я вызываю эту функцию

    let orderIdForbuyingSessionsEdit = '';

  orderIdForbuyingSessionsEdit = this.getClientOrderIdFromDoorOrder(orderId)
  

Это выдает ошибку

 Type 'Promise<any>' is not assignable to type 'string'.ts(2322)
  

Как мне получить строку в качестве возвращаемого значения из асинхронной функции.

Комментарии:

1. Ты должен await this.getClientOrderIdFromDoorOrder(orderId)

2. async function Всегда возвращает обещание, в этом вся их цель. Вам все равно нужно будет дождаться результата.

Ответ №1:

Чтобы вызвать асинхронные функции, вам нужно ввести await ключевое слово, по которому вы производите вызов. Это будет ждать, пока обещание не будет выполнено и не вернет значение.

В тексте вашего вопроса первая getId функция является хорошим примером асинхронного вызова функции. Вам нужно сделать то же самое и в том месте, где вы его вызываете:

  1. функция, в которой вы вызываете другую асинхронную функцию, должна иметь async префикс ключевого слова
  2. асинхронная функция, которая будет вызвана, должна иметь await префикс ключевого слова

Итак, чтобы где-то правильно вызвать вашу getId функцию, вам нужно действовать следующим образом:

 async function myMethod() {
   let value = await getId(123);
   console.log(value);
}
  

Подробнее об асинхронности / ожидании читайте здесь.