Как я могу использовать функцию обратного вызова в машинописи при использовании FileReader?Угловой 5 - PullRequest
0 голосов
/ 14 февраля 2019

Я сталкиваюсь с некоторыми трудностями при попытке применить обещания / обратные вызовы к моей функции TypeScript.

Мне нужно собрать результат reader.onloadend и отправить его в мой экспресс-сервер nodejs (с использованием сервисов), но я смог сделать это только через setTimeout, и я уверен, что еслиЯ могу сделать это с помощью setTimeout, я также могу сделать это с помощью обещаний / обратных вызовов ...

Я просто не знаю как, я попытался передать обратный вызов в качестве параметра и вызвать его позже, но я 'Я получаю "обратный вызов не является функцией".

var reader = new FileReader();
let inf = {}
let base64data;
let splitUrl = this.url.split('-')[4];    


reader.onloadend = function() {
  base64data = reader.result;

  inf = { base64: base64data, id: splitUrl }
}

setTimeout(() => {

  console.log(inf);
}, 3000);

Эй, ребята, я исправил это, изменив с "function () {}" на функцию стрелки!

1 Ответ

0 голосов
/ 14 февраля 2019

Ваша функция обратного вызова вызывается после окончания загрузки.Использование setTimeout - плохая идея, потому что оно полностью не связано с асинхронной синхронизацией нагрузки.

Просто сделайте то, что вы хотите сделать с результатом в обратном вызове.

reader.onloadend = () => {
  base64data = reader.result;

  inf = { base64: base64data, id: splitUrl }
  console.log(inf);
  doStuffWithFile(inf);
}
...