Я столкнулся с небольшими проблемами в своем коде обещания, где мой Promise.map, кажется, заканчивается преждевременно. Я уверен, что это проблема с моей логикой, но с кодом я не уверен, как отлаживать его.Перспектива Bluebird .map заканчивается преждевременно?
В настоящее время, он выводит [], B, A, A
с blobList
размером 2. Как я могу его так, что он заканчивает толкая к imgList
и, таким образом, выводит A, A, [*some base64 encoding here*], B
, где в функции .then
, imgList не должен быть пустым?
blobToBase64 Функция
blobToBase64(blob, cb) {
var reader = new window.FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
let base64data = reader.result;
cb(base64data);
}
}
Основная функция
Promise.map(blobList, function(blobObj){
helper.blobToBase64(blobObj.data, (fn) => {
imgList.push(fn);
console.log('A');
})
}).then(function(){
console.log(imgList);
console.log('B');
})
Просто, чтобы проверить, является переменной обещает объект, содержащий несколько обещание? И все проверки, чтобы убедиться, что все обещания разрешены (или отклонены)? – Bryan
Переменные обещания - это набор обещаний. .all - это функция, которая выполняет каждое обещание в массиве и только вызывает. then, когда все были решены. – kjonsson
@Bryan, если 'helper.blobToBase64()' принадлежит вам, чтобы его можно было проработать, и сохранить код более высокого уровня просто. Также полезно использовать 'Promise.map()', как вы пытались в вопросе, позволяя 'imgList' поставляться по цепочке обещаний; нет беспорядочного внешнего var. –