質問編集履歴

1

fetchを使う方向で、いただいたコードとともに挙動の確認をしたので追記にまとめました。

2021/09/29 02:07

投稿

fungi
fungi

スコア2

test CHANGED
File without changes
test CHANGED
@@ -148,6 +148,158 @@
148
148
 
149
149
 
150
150
 
151
+ ##追記
152
+
153
+
154
+
155
+ 昨日fetchの方が適しているとのご意見をいただき、調べながら確認したことをまとめます。
156
+
157
+ ご教示いただいた下記コードですが、
158
+
159
+
160
+
161
+ const getCSV=()=>fetch('sample.csv').then(res=>res.text()).then(csvArray);
162
+
163
+ const csvArray=str=>str.split("\r\n").map(x=>x.split(","));
164
+
165
+
166
+
167
+ (async ()=>{
168
+
169
+ const result=await getCSV();
170
+
171
+ console.log(result); ※1
172
+
173
+ })();
174
+
175
+
176
+
177
+ //↑この外でresultを参照できませんでした。
178
+
179
+
180
+
181
+ console.log(result) //Uncaught・・・
182
+
183
+
184
+
185
+ //※1では
186
+
187
+ //(5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
188
+
189
+ //0: (2) ['"0001"', '11']
190
+
191
+ //1: (2) ['"0002"', '12']
192
+
193
+ //2: (2) ['"0003"', '13']
194
+
195
+ //3: (2) ['"0004"', '14']
196
+
197
+ //のように出力され、配列になっていました。
198
+
199
+
200
+
201
+ //そこで、resultを最初に定義してみましたが、
202
+
203
+
204
+
205
+ let result = []
206
+
207
+
208
+
209
+ const getCSV=()=>fetch('sample.csv').then(res=>res.text()).then(csvArray);
210
+
211
+ const csvArray=str=>str.split("\r\n").map(x=>x.split(","));
212
+
213
+
214
+
215
+ (async ()=>{
216
+
217
+ result=await getCSV();
218
+
219
+ console.log(result);
220
+
221
+ })();
222
+
223
+
224
+
225
+ console.log(result)
226
+
227
+
228
+
229
+ //以下のような出力結果になりました。
230
+
231
+ //[]
232
+
233
+ // length: 0
234
+
235
+ // [[Prototype]]: Array(0)
236
+
237
+ //(5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
238
+
239
+ // 0: (2) ['"0001"', '11']
240
+
241
+ // 1: (2) ['"0002"', '12']
242
+
243
+ // 2: (2) ['"0003"', '13']
244
+
245
+ // 3: (2) ['"0004"', '14']
246
+
247
+
248
+
249
+ resultの中身が空のままになってしまいました。
250
+
251
+ resultを配列として別の関数で参照したり、result[1]などのように扱いたいので
252
+
253
+ グローバル変数としたいと思っています。
254
+
255
+ 自分でも調べながらやってみたのですが、
256
+
257
+
258
+
259
+ let result = fetch("sample.csv").then(res=>res.text()).then(function convertCSVtoArray(str){
260
+
261
+ const temp = str.split("\r\n")
262
+
263
+ for(let i=0;i<temp.length;++i){
264
+
265
+ result[i] =temp[i].split(",")
266
+
267
+ }
268
+
269
+ })
270
+
271
+
272
+
273
+ console.log(result)
274
+
275
+
276
+
277
+ //↑のようにすると、以下のように出力されます。
278
+
279
+
280
+
281
+ //Promise {<pending>}
282
+
283
+ //0: (2) ['"0001"', '11']
284
+
285
+ //1: (2) ['"0002"', '12']
286
+
287
+ //2: (2) ['"0003"', '13']
288
+
289
+ //3: (2) ['"0004"', '14']
290
+
291
+
292
+
293
+ Promiseの概念がつかめていないままなのですが、
294
+
295
+ pendingとなっているということは、値は検出してるけど、
296
+
297
+ まだresultに取得できていないということでしょうか?
298
+
299
+
300
+
301
+
302
+
151
303
 
152
304
 
153
305
  ### 補足情報(FW/ツールのバージョンなど)