@IvanIvanIvanIvanIvan

Есть ли возможность функцию которая принимает callback научить работать с async await?

Есть библиотека geo redis. Она работает только приемом на вход callback функции

geo.addLocation('Toronto', {latitude: 43.6667, longitude: -79.4167}, function(err, reply){
  if(err) console.error(err)
  else console.log('added location:', reply)
})


Можно ли как то заставить ее работать с async await?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 3
@Israfil22
В Node.js - utils.promisify.
Ответ написан
Комментировать
Как-то так (врапперы можно можно поискать в npm)

const addLocation = (city, coord) => new Promise((resolve, reject) => {
  geo.addLocation(city, coord, (err, reply) => {
    if (err) reject(err)
    else resolve(reply)
  })
})

try {
  const reply = await addLocation('Toronto', {latitude: 43.6667, longitude: -79.4167})
  console.log('added location:', reply)
} catch (err) {
  console.error(err)
}
Ответ написан
Комментировать
Seasle
@Seasle Куратор тега JavaScript
const api = (isError = false, callback) => !isError
  ? callback(null, { code: 200 })
  : callback(new Error(), null);

const promisify = (handle = () => {}) => (...args) => new Promise((resolve, reject) => {
  handle(...args, (error, data) => {
    if (error) {
      reject(error);
    } else {
      resolve(data);
    }
  });
});

promisify(api)(true).then(data => {
  console.log('data', data);
}).catch(error => {
  console.log('error', error);
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы