javascript - Promise 返回空值

标签 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)
});
..........

我在终端上看到:{}

我的错误在哪里或者我做错了什么?

问候。

最佳答案

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

关于javascript - Promise 返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56870838/

相关文章:

javascript - 上传文件前验证文件扩展名

javascript - 访问另一台 LAN PC 上的 Webpack Dev Server

javascript - 如何借助回调和 Promise 概念使用 setTimeout 函数打印消息?

javascript - 带有递归 promise 的合并排序

javascript - 我应该如何构造 promise 来处理多个依赖的异步任务?

javascript - 对象方法未在 for 循环中运行

javascript - EaselJS - 有两个具有不同 FPS 的 Canvas

javascript - Magento - opcheckout.js - 在结帐期间手动调用 setAddress()

javascript - jQuery: promise : 'always()' 未执行

javascript - 返回 promise 的函数必须是异步的