質問編集履歴

1

回答をもとにコードをpromiseありで修正

2023/04/10 23:42

投稿

muro
muro

スコア99

test CHANGED
File without changes
test CHANGED
@@ -36,3 +36,45 @@
36
36
  ページ上に設置されているbuttonタグをクリックするとcsvファイル選択のダイアログが開き、そのあとに選択されたcsvの内容に基づいた処理を実行しようとしています。
37
37
  しかし、上のコードでいう「step1」「step2」「step3」「end」の順番で実行されてほしいのに、awaitを入れているにも関わらず非同期処理になってしまい、「step1」「step2」「end」「step3」の順番になってしまいます。
38
38
  どうすれば「end」のところを最後に実行させられるのでしょうか?
39
+
40
+ **追記**
41
+
42
+ ```javascript
43
+ $(function () {
44
+ $("button").click(async function () {
45
+ var e, fh, fh_list, file, opts, reader;
46
+ console.log("step1");
47
+ try {
48
+ console.log("step2");
49
+ opts = {
50
+ types: [
51
+ {
52
+ description: 'csv file',
53
+ accept: {
54
+ 'text/csv': ['.csv']
55
+ }
56
+ }
57
+ ]
58
+ };
59
+ fh_list = (await window.showOpenFilePicker(opts));
60
+ fh = fh_list[0];
61
+ file = (await fh.getFile());
62
+ reader = new FileReader();
63
+ await new Promise((resolve, reject) => {
64
+ reader.addEventListener('load', resolve);
65
+ reader.addEventListener('error', reject);
66
+ reader.readAsText(file, 'UTF-8');
67
+ reader.onload = (event) => {
68
+ console.log("step3");
69
+ console.log(event.target.result);
70
+ };
71
+ });
72
+ } catch (error) {
73
+ e = error;
74
+ console.log(e);
75
+ }
76
+ console.log("end");
77
+ });
78
+ });
79
+ ```
80
+ promiseを入れても「step3」が最後に実行されてしまいます。