画像のURLをbase64に変換する関数から、変換が終わるまで処理を停止させたいのですが、そのやり方が分かりません。
html
1<script> 2(function(){ 3 4 async function getBase64ImageFromUrl(imageUrl){ 5 var res = await fetch(imageUrl); 6 var blob = await res.blob(); 7 8 return new Promise((resolve, reject) => { 9 var reader = new FileReader(); 10 reader.addEventListener("load", function () { 11 resolve(reader.result); 12 }, false); 13 14 reader.onerror = () => { 15 return reject(this); 16 }; 17 reader.readAsDataURL(blob); 18 }) 19 } 20 21 function getBase64(url){ 22 let base64 = ''; 23 24 getBase64ImageFromUrl(url) 25 .then(result => { 26 base64 = result; //ここは通っている 27 }) 28 .catch(err => console.error(err)); 29 30 return base64; 31 } 32 33 //データが入った状態で取得したい 34 console.log(getBase64('/image.png')); 35 36}()); 37</script>
変換自体は出来ているのですが、非同期処理なためconsole.logに入るデータは空白です。
getBase64ImageFromUrlは非同期関数になっていると思うので、await getBase64ImageFromUrlとしても「Uncaught SyntaxError: await is only valid in async function」とエラーが出ます。
base64は別の関数の返り値として使用したいのですが、この処理の流れが分からないため手元で止まっている状態です。
おそらく何か仕様を誤解していると思うのですが、ご教示いただけますでしょうか。
回答2件
あなたの回答
tips
プレビュー