承诺返回空值

时间:2019-07-03 13:05:43

标签: javascript promise

我正在学习如何使用Promise执行异步任务。

我正在努力解决一个无法解决的问题,在搜索并阅读此处的其他帖子后,我不知道该如何解决。

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 个答案:

答案 0 :(得分:2)

您需要在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