可以不使用回调而只使用Uint8Array将Blob转换为JavaScript吗?
如何为调用变量uint8array返回uint8data
let str='content';
str2blob=(str,type='text/plain')=>new Blob([str],{type:type});
let blob=str2blob(str);
function blob2uint(blob){
new Response(blob).arrayBuffer().then(buffer=>{
uint=[...new Uint8Array(buffer)];
console.log("Uint8Array",uint);
return uint;
});
}
let uint8data=blob2uint(blob);
console.log(uint8data); //Show Uint8Array发布于 2021-09-01 13:47:06
假设这是函数中的某个位置,您可以使其异步,并使用等待等待承诺完成,一旦您从blob2uint函数返回它:
async function myBlobToUIntDemo() {
let str='content';
str2blob=(str,type='text/plain')=>new Blob([str],{type:type});
let blob=str2blob(str);
function blob2uint(blob){
return new Response(blob).arrayBuffer().then(buffer=>{
uint=[...new Uint8Array(buffer)];
console.log("Uint8Array",uint);
return uint;
});
}
let uint8data = await blob2uint(blob);
console.log(uint8data); //Show Uint8Array
}让我们提供一些更多的信息:
为什么我一开始就需要回调?
因为您是通过从响应中提取arrayBuffer来执行异步工作的。JavaScript (据我所知)只在一个线程中运行。在代码中等待一个不使用回调的网站会停止页面上所有其他JavaScript的执行,如果你不把它放在后台的话;这就是回调和承诺为您所做的(至少从外部)。
承诺?
执行异步工作的函数通常返回一个Promise对象,该对象承诺在工作完成后为您提供值(通过调用then回调中传递的函数),或者在发生错误时出错(通过调用catch回调)。
异步/等待
引入异步/等待是为了使使用承诺更好、更易读,从而大大减少了回调的需要。您可以在这篇MDN文章中阅读更多有关这方面的内容。
上面的代码块只包含为使事情正常工作而进行的最低限度的更改。让我们再简化一点吧!
async function myBlobToUIntDemo() {
let str = 'content';
let str2blob = (str, type = 'text/plain') => new Blob([str], { type: type });
let blob = str2blob(str);
const buffer = await new Response(blob).arrayBuffer();
const uint = [...new Uint8Array(buffer)];
console.log(uint);
}请注意,这也会返回一个承诺(如果您将函数标记为异步,这将自动发生),因此,如果要在代码中的任何地方使用该函数,请确保记住这一点。
https://stackoverflow.com/questions/69014731
复制相似问题