我正在使用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函数中取回二进制数据?
答案 0 :(得分:1)
您是正确的,因为这是一个承诺问题。在您的第一个函数中,r.onload
仅在第一个函数返回后才返回,即使那样,它也只会从嵌套函数中返回。
我不会为您编写正确的代码,但是您要做的是将第一个函数的主体包装在一个可以在r.onload
函数中解析的Promise中,然后第二个函数应该调用{{ 1}}上的承诺就可以兑现(提示:您需要在此处做出另一个承诺)。
MDN拥有有关.then
的良好信息。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise