Я бы немного упростил, имея функцию, единственная задача которой - поместить обертку обещания вокруг readFileAsDataURL
:
// Promise wrapper for FileReader.prototype.readFileAsDataURL
const readFileAsDataURL(file) {
return new Promise((resolve, reject) => {
if (!file) {
throw new Error("No file given");
}
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = reject;
reader.readAsDataURL(file); // Note: Do this after attaching the handlers, not before
});
};
Я бы также изменил imageProcess
, чтобы принять src
вместо FileReader
:
const imageProcess = (src) => {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => resolve(img);
img.onerror = reject;
img.src = src;
});
};
Тогда ваша readerProcess
функция просто объединяет обещания вместе:
const readerProcess = (file) => {
return readFileAsDataURL(file)
.then(imageProcess);
};
Использование такое, как вы его показали:
readerProcess(file).then(
res => {console.log('reader resuld', res)},
err => {console.log('error')}
);