質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

392閲覧

Promise型から値を取り出してAPIリクエストにセットしたい

lawsoncoffee

総合スコア46

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2022/06/19 12:57

画像を取得→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 67 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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

js

1const imgDataUrlPromise = fileListToBase64(files)

awiat しましょう。

js

1const imgDataUrlPromise = await fileListToBase64(files)

投稿2022/06/19 23:18

int32_t

総合スコア20872

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lawsoncoffee

2022/06/23 11:00

遅くなり、すいません。。無事にできました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問