我正在学习如何使用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)
});
..........
我在终端机上看到:{}
。
我的错误在哪里或我在做什么错?
致谢。
答案 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