Не понимаю, как работают async / await / promises

Я относительно новичок в node.js и javascript в целом. В частности, меня смущают обещания и async / await. Я пытаюсь асинхронно запрашивать изображения с удаленного URL-адреса и преобразовывать их в base64. Может кто-нибудь объяснить, что не так с моим кодом ниже?

    function loadAsync(image){
        return new Promise(function(resolve,reject){
            request({url: image, encoding: null}, function (err, res, body) {
                if (!err && res.statusCode == 200) {
                    let base64prefix = 'data:' + res.headers['content-type'] + ';base64,'
                    let image = body.toString('base64');
                    let complete = base64prefix + image;
                    resolve(complete)
                } else {
                    return reject(err);
                }
            });     
        });
    }

    async function getImagesAsBase64(images){
        let promises = [];
        images.forEach(image =>{
            promises.push(loadAsync(image).then(results =>{
                return results;
            }));
        });
        const imagesAsBase64 = await Promise.all(promises);
        return imagesAsBase64;
    }

   //Following returns Promise{<pending>} when given an array of images
   console.info(getImagesAsBase64(images));

вы можете переписать свою вторую функцию как async function getImagesAsBase64 (images) { return Promise.all(images.map(loadAsync)) }

Thank you 12.04.2018 04:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Глупый, мне нужно было await результат, выполнив

let imagesAsBase64 = await getImagesAsBase64(images);
console.info(imagesAsBase64);

Кстати, вам не нужен обратный вызов then() с return results. Вы могли бы просто сделать promises.push(loadAsync(image))

Matt Browne 12.04.2018 04:37

Другие вопросы по теме