画像を取得→dataUrlに変換→dataUrlをAPIで送る
ということをやりたいと考えています。
dataUrlに変換を下記ソースコードのfileListToBase64(fileList)の部分でやろうとしているのですが、
FileReaderを非同期処理でやる必要があるため、returnがPromise型になっています。
Promise型のままだとAPIリクエストできないので、dataUrlを取り出したいのですが、
やり方等ご存知であればご教授いただきたいです。
試したこととしては、以下のように変数にそのまま代入しましたが、Promise型のままでした。
javascript
1let url 2Promise.resolve(imgDataUrlPromise).then(function(value) { 3 url = value 4} 5 6や 7 8url = Promise.resolve(imgDataUrlPromise)
以下、ソースコードです。
よろしくお願いします。
javascript
1const imgDataUrlPromise = fileListToBase64(files) 2await PostImage(imgDataUrlPromise, titleRef.current.value, commentRef.current.value, setStatusCode); 3 4export async function fileListToBase64(fileList) { 5 6 function getBase64(file) { 7 const reader = new FileReader() 8 return new Promise(resolve => { 9 reader.onload = ev => { 10 resolve(ev.target.result) 11 } 12 reader.readAsDataURL(file) 13 }) 14 } 15 const promises = [] 16 for (let i = 0; i < fileList.length; i++) { 17 promises.push(getBase64(fileList[i])) 18 } 19 return await Promise.all(promises) 20} 21 22export async function PostImage(_imgUrl, _title, _comment, setStatusCode) { 23 24 const params = new URLSearchParams() 25 params.append('imageUrl', _imgUrl) 26 params.append('title', _title) 27 params.append('text', _comment) 28 29 const userId = localStorage.getItem('userId') 30 const url = domain + "/api/post/userId/" + userId; 31 32 const request = { 33 method: "POST", 34 headers: { 35 "Content-Type": "application/x-www-form-urlencoded", 36 "token": localStorage.getItem('token'), 37 }, 38 body: params 39 } 40 41 const response = await fetch(url, request); 42 const statusCode = response.status 43 setStatusCode(statusCode); 44 if (statusCode === 200 || statusCode === 201) { 45 return "投稿しました" 46 } else { 47 const body = await response.json(); 48 return body.message 49 } 50}
回答1件
あなたの回答
tips
プレビュー