Обещание возвращает пустое значение - PullRequest
0 голосов
/ 03 июля 2019

Я учусь использовать обещания для выполнения асинхронных задач.

Я борюсь с проблемой, которую не могу понять, и после поиска и прочтения других сообщений здесь я незнать, как это исправить.

function processStuff(things) {
    var result = {};
    var pictures = checkPictures(data);

    if (pictures.length > 0) {
        return new Promise(function(resolve) {
            var promisesArray = [];
            pictures.forEach(function(picture) {
                promisesArray.push(getBase64(picture));
            });

            Promise.all(promisesArray).then(function(processedPictures) {
                result = getOtherSutff(things);
                var insertedElements = Object.keys(result).length;
                for (var index = 0; index < processedPictures.length; index++) {
                    var item = processedPictures[index];
                    result['thingId-' + (++insertedElements).toString()] = item;
                }
            });
            resolve(result); (1)
        });
    } else {
        return new Promise(function(resolve) {
            result = getOtherSutff(things);
            resolve(result);
        });
    }
}

Когда я отлаживаю код, я вижу, что в (1) переменная заполнена данными, но когда я вызываю функцию и пытаюсь использовать данные:

...........
processStuff(things).then(function(result) {
    console.log(result)
});
..........

Я вижу на терминале: {}.

Где моя ошибка или что я делаю не так?

С уважением.

1 Ответ

2 голосов
/ 03 июля 2019

Вам нужно переместить resolve(result) в ваш Promise.all обратный вызов:

   Promise.all(promisesArray).then(function(processedPictures) {
        result = getOtherSutff(things);
        var insertedElements = Object.keys(result).length;
        for (var index = 0; index < processedPictures.length; index++) {
            var item = processedPictures[index];
            result['thingId-' + (++insertedElements).toString()] = item;
        }
        resolve(result); // result is available here
    });
    resolve(result); // result has not been set here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...