DmitrySheklein
@DmitrySheklein

Как дождаться выполнения кода в Promise, чтобы выполнить resolve()?

Задача: Считать контент файла, преобразовать его в Base64 и отправить на сервер.

Когда в Promise на callback чтения файла я делаю resolve() с преобразованием файла в Base64, видимо он срабатывает раньше, чем файл преобразовывается (похоже из-за размера файла) и на сервер уходит пустая строка.
Как это можно обойти, нужно точно дождаться преобразования и только потом выполнить resolve().

Сторонние плагины из npm тоже не имеют cb после преобразования в строку
https://www.npmjs.com/package/nodejs-base64
function uploadFile(event, cb){
	const file = event;
	const fileName = path.basename(file);

	new Promise((resolve) => {
		fs.readFile(`${file}`, {encoding: 'utf8'}, (err, data) =>{
			if (err) throw err;
			resolve(Buffer.from(data).toString('base64')) // Как здесь дождаться конвертации в BASE64
		});
	})
	.then((encoded) => {		
		const params = new URLSearchParams();
		params.append('secret_key', SECRET_KEY);
		params.append('form[file_name]', `${fileName}`);
		params.append('form[file_content]', `${encoded}`);
    
		fetch(href, {
			method: 'post',
			body:    params,
			timeout: 5000,
		})
		.then(res => res.json())
		.then(json=>{
			if(json.status === `ok`){}
		})
	})
}
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Начиная с 10 ноды есть файловое апи не на колбэках, а на промисах, почему бы не использовать его?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы