我正在学习如何使用 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/