質問を読んで頂きありがとうございます。
ユーザがファイルをアップロードし、それを加工して表示するというプログラムを作ろうとしています。
ファイルをアップロード→内容を加工という処理を同期的に行うためにPromiseを使いましたが、値が上手く帰ってきません。
下記がそのコードです。雰囲気が伝わるよう、なるべく省略しないようにしましたので長くなってしまいましたがお許しください。
js
1// 読み込み1 ユーザがアップロードしたファイル1を加工して返却する。 2function getMasterCSV() { 3 return new Promise((resolve, reject)=>{ 4 try { 5 let masters = []; 6 let fileInput = document.getElementById('openMasterCSV_btn'); 7 let fileReader = new FileReader(); 8 fileInput.onchange = () => { 9 let file = fileInput.files[0]; 10 fileReader.readAsText(file); 11 }; 12 fileReader.onload = () => { 13 let result = fileReader.result; 14 // (略)加工処理をしてmastersに代入 15 resolve(masters); 16 } 17 } catch (e) { 18 reject(e); 19 }; 20 }); 21}; 22 23// 読み込み2 ユーザがアップロードしたファイル2を加工して返却する。 24function getTransferCSV() { 25 return new Promise((resolve, reject)=>{ 26 try { 27 let transfers = []; 28 let fileInput = document.getElementById('openTransferCSV_btn'); 29 let fileReader = new FileReader(); 30 fileInput.onchange = () => { 31 let file = fileInput.files[0]; 32 fileReader.readAsText(file); 33 }; 34 fileReader.onload = () => { 35 let result = fileReader.result; 36 // (略)加工処理をしてtransfersに代入 37 resolve(transfers); 38 } 39 } catch (e) { 40 reject(e); 41 }; 42 }); 43}; 44 45async function main() { 46 // 読み込まれたデータを受け取る 47 let masters = await getMasterCSV(); 48 let transfers = await getTransferCSV(); 49 console.log(masters); // なにも表示されない(undefinedとかでもない) 50 console.log(transfers); // なにも表示されない(undefinedとかでもない) 51} 52 53main();
このようなコードです。main()
のconsole.log
ではなにもコンソールに表示されなかったので、await
はちゃんと機能している模様です。しかしresolve()
した内容が帰ってきません。getMasterSCV
getTransferCSV
でエラーがあるのかとも思い、try
を噛ませてみましたがなにも表示されませんでした。
色々調べてみたのですが解決できず質問しました。回答よろしくお願致します。また、このようなファイルを読み込む処理ではそもそもPromiseを利用すべきではない、等の意見でもありがたいです。
回答2件
あなたの回答
tips
プレビュー