teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足

2018/05/27 06:55

投稿

karamarimo
karamarimo

スコア2555

answer CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  どうやら`event.dataTransfer.items`はdropイベントのハンドラーが終了すると同時に空になってしまうようです。
4
4
 
5
+ 今の場合、
6
+ ```js
7
+ for (const item of items) {
8
+ const entry = item.webkitGetAsEntry();
9
+ await scanFiles(entry, results);
10
+ }
11
+ ```
12
+ で1周目で`await`するため2週目以降は非同期的に実行され、そのときには`items`は空になっている、というのが今回の問題の原因です。
13
+
5
14
  [FileEntry.file method makes dataTransferItemList empty - Stack Overflow](https://stackoverflow.com/a/13443728/7387340)
6
15
  ↑この方法ではdropイベントのハンドラー内で同期的に`event.dataTransfer.items`のすべてアイテムについて`.webkitGetAsEntry()`を実行して`FileSystemEntry`をすべて先にゲットしてしまうという方法をとっています。これにならうと、
7
16