Я не знаю объекта FileReader в деталях, но похоже, что он читает данные из URL асинхронно.Это означает, что когда ваша функция возвращает reader.result, объект FileReader еще не завершил чтение файла.Это не заканчивается до тех пор, пока не будет вызван обратный вызов onload (или возникнет какое-либо другое состояние ошибки).
Итак, ваша функция возвращается, пока чтение все еще происходит асинхронно.Таким образом, результат еще не определен.Результат будет доступен на стороне обратного вызова onload или (я предполагаю), внутри других обратных вызовов, которые будут указывать на условия ошибки (onabort, onerror и т. Д.).