Как получить двоичные данные для видео файла в JavaScript, Angular - PullRequest
0 голосов
/ 23 сентября 2018

Я использую платформу ionic 3 для загрузки видеофайла в vimeo api.Мне нужно получить двоичные данные для видеофайла, и я загружаю, используя элемент типа файла ввода.

Код, который я написал, выглядит следующим образом

  videoUploadBody(videoObj) {
    const r = new FileReader();
    r.onload = function(){
        console.log("Binary data", r.result);
        return r.result;
    };
    r.readAsArrayBuffer(videoObj);
  }

Это функция, которая мне нужнапозвоните, и он должен вернуть мне видео файл в двоичном виде.Функция, из которой я вызываю вышеуказанную функцию, выглядит следующим образом:

 uploadVideo(videoFile, createdVideo) : Observable<any> {
    const bodyObj = this.compilerProvider.videoUploadBody(videoFile);
    return this.http.patch<Observable<any>>(createdVideo.upload.upload_link, bodyObj, this.uploadReqOpts);
  }

Здесь переменная bodyObj содержит неопределенное значение, в то время как у меня console.log - функция videoUploadBody выдает мне данные в двоичном виде.

Я думаю, что есть какая-то проблема асинхронности или обещания.Что мне нужно изменить, чтобы вернуть двоичные данные в функцию uploadVideo?

1 Ответ

0 голосов
/ 23 сентября 2018

Вы правы в том, что это проблема обещания.В вашей первой функции r.onload будет возвращаться только после возврата первой функции, и даже тогда она будет возвращаться только из вложенной функции.

Я не собираюсь писать правильный код для вас, но чтовам нужно сделать это, обернуть тело первой функции в обещание, которое разрешается в функции r.onload, затем вторая функция должна вызвать .then для этого обещания, чтобы выполнить его (подсказка: вам нужно сделать еще одно обещание здесь).

MDN имеет хорошую информацию о Promise.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

...