ошибка с async/await

Рейтинг: 0Ответов: 1Опубликовано: 23.04.2023

Подскажите, пжлста, пытаюсь освоить async/await. Пытался на них переписать с промисов, но почему то вовзращает undefined

//этот блок с промисами работает, хотелось бы понять почему asunc await не пашет
// export function currentGeoPositionRequest() {
//   return new Promise((res, rej) => {
//     const currentPosition = navigator.geolocation.getCurrentPosition(
//       (position) => res(position),
//       (e) => rej(e)
//     )
//   })
// }


export async function currentGeoPositionRequest() {
  try {
    const currentPosition = await navigator.geolocation.getCurrentPosition(
      (position) => {
        const { latitude, longitude } = position.coords
        return { latitude, longitude }
      },
      (e) => console.error('Error>>', e)
    )
    return currentPosition
  } catch (e) {
    console.error('Error>>', e)
  }
}

async function log() {
  const currentPosition = await currentGeoPositionRequest()
  console.log(currentPosition) // undefined
}
log()

Ответы

▲ 4Принят

getCurrentPosition ничего не возвращает, поэтому нет смысла ни присваивать результат чему-нибудь, ни добавлять await перед вызовом.

Чтобы await заработал функцию принимающую callback нужно обернуть в Promise

async function getCurrentPositionPromise() {
  return new Promise((res, rej) => {
    navigator.geolocation.getCurrentPosition(
      (position) => res(position),
      (e) => rej(e)
    )
  })
}

непосредственно к Promise уже можно применить await

export async function currentGeoPositionRequest() {
  try {
    const currentPosition = await getCurrentPositionPromise();
    return currentPosition
  } catch (e) {
    console.error('Error>>', e)
  }
}