async function readmultifiles(files, callback) {
        const loaded = [];

        for (const file of files) {
            try {
                const exifData = await exifr.parse(file); // eslint-disable-line no-await-in-loop
                const photo = {
                    service: 'photo',
                    id: _idAutoinc++,
                    name: file.name,
                    getSrc: () => readFileAsDataURL(file),
                    file: file,
                    loc: [exifData.longitude, exifData.latitude],
                    direction: exifData.GPSImgDirection,
                    date: exifData.CreateDate || exifData.DateTimeOriginal || exifData.ModifyDate,
                };
                loaded.push(photo);
                const sameName = _photos.filter(i => i.name === photo.name);
                if (sameName.length === 0) {
                    _photos.push(photo);
                } else {
                    const thisContent = await photo.getSrc(); // eslint-disable-line no-await-in-loop
                    const sameNameContent = await Promise.allSettled(sameName.map(i => i.getSrc())); // eslint-disable-line no-await-in-loop
                    if (!sameNameContent.some(i => i.value === thisContent)) {
                        _photos.push(photo);
                    }
                }
            } catch {
                // skip files which are not a supported image file
            }
        }

        if (typeof callback === 'function') callback(loaded);
        dispatch.call('change');
    }
Reads and parses files
@param {Array<object>} files - Holds array of file - [file_1, file_2, ...]