javascript - 从 Javascript 函数中提取 dataURL
问题描述
我有一个旨在使用 FileReader 创建文件的 dataURL 的函数。考虑这个例子。
toDataURL(url, callback){
var xhr = new XMLHttpRequest();
xhr.open('get', url);
xhr.responseType = 'blob';
xhr.onload = function(){
var fr = new FileReader();
var test = fr.onload = function(){
callback(this.result);
};
fr.readAsDataURL(xhr.response); // async call
};
xhr.send();
}
我想将this.result
内联函数中的变量提取为返回变量。它没有其他功能的访问权限。我该怎么做?
解决方案
基本上,您要做的是从异步函数返回一个值,您可以使用 Promises 和可选的 async/await 来执行此操作。
看一下这个:
function toDataURL(url, callback) {
return new Promise( function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('get', url);
xhr.responseType = 'blob';
xhr.onload = function() {
var fr = new FileReader();
var test = fr.onload = function() {
resolve(this.result)
callback(this.result);
};
fr.readAsDataURL(xhr.response); // async call
};
xhr.onerror = function() {
reject('Error);
}
xhr.send();
});
}
const result = await toDataURL('some url');
// or
toDataURL('some url').then((result) => {
// do something with the result
});
推荐阅读
- c++ - 是否可以从基类非虚拟方法使用派生类虚拟方法?
- javascript - 使用动态数据的滑块
- python - 在python的for循环中,为什么增量为负时不打印起点?
- c - 我可以从内核分配内存并从用户空间释放它吗?
- python - Facebook API 离线转化事件参数数据必须是数组错误
- arrays - 无法从 Angular/Firebase 中的数组中删除对象
- flutter - 是否存在与修改内置 Flutter 小部件并在我的项目中使用相关的版权或许可问题?
- android - 如何在片段中关闭应用程序(后台)时保持计时器运行
- python - 从 Groovy 调用 python 脚本方法
- azure-keyvault - Azure Key Vault 服务原则身份验证失败