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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

1665閲覧

Firebaseのbatchについて

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2020/04/01 17:59

Flutterで以下のようなコードを書いたのですが、①の部分の実行が終わる前に②③が実行されてしまいます。
①の再帰の中身まで完全に終わってから②③を実行したいのですが、どのようにプログラムを書けば良いでしょうか?どなたかご教授お願いします。

dart

1static deleteFolder(String level, String currentLevel) async { 2 String userId = await User.getUserId(); 3 4 var batch = _firestore.batch(); 5 6 Future deleteChildFolderLoop(String newLevel) async { 7 _firestore 8 .collection('users') 9 .document(userId) 10 .collection(newLevel) 11 .getDocuments() 12 .then((snapshot) { 13 for (DocumentSnapshot ds in snapshot.documents) { 14 String type = ds.data['type']; 15 String id = ds.data['id']; 16 if (type == 'folder') { 17 deleteChildFolderLoop(id); 18 } 19 batch.delete(ds.reference); 20 } 21 }); 22 } 23 24 //① 25 await deleteChildFolderLoop(level); 26 27  //② 28 batch.delete(_firestore 29 .collection('users') 30 .document(userId) 31 .collection(currentLevel) 32 .document(level)); 33 //③ 34 batch.commit(); 35 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

await の指定が足りていない部分があるからかもしれません。

static deleteFolder(String level, String currentLevel) async { String userId = await User.getUserId(); var batch = _firestore.batch(); Future deleteChildFolderLoop(String newLevel) async { QuerySnapshot snapshot = await _firestore .collection('users') .document(userId) .collection(newLevel) .getDocuments(); for (DocumentSnapshot ds in snapshot.documents) { String type = ds.data['type']; String id = ds.data['id']; if (type == 'folder') { await deleteChildFolderLoop(id); } batch.delete(ds.reference); } } //① await deleteChildFolderLoop(level); //② batch.delete(_firestore .collection('users') .document(userId) .collection(currentLevel) .document(level)); //③ batch.commit(); }

投稿2020/04/02 21:07

popobot

総合スコア6586

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

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

退会済みユーザー

退会済みユーザー

2020/04/05 14:59

返信が遅くなってしまい申し訳ございません。 無事解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問