前提・実現したいこと
クラスのプロパティに設定された複数の画像(base64文字列を格納した配列)を順にアップロードし、アップロードできた画像のパスをクラスのプロパティに設定し直したいです。
その後(画像がすべてアップロードされた後に)、クラスのプロパティをデータベースに保存したいのですが、その前段階でつまづいてます。
原因はわかっていますが、その解決方法がわかりません。
reduceを使っているからいけないのでしょうか。JS初心者なのでお手柔らかにご教示いただけると助かります。
発生している問題・エラーメッセージ
原因はアップロードが完了する(画像パスが設定される)前に、データベースに保存しにいっていることです。
以下画像の通り、アップロード完了時のログ(fuga
)より前に、データベース保存時のログ(piyo
)出力されており、画像がundefinedのままデータを保存しにいっていることがわかります。
※以下は2ファイルをアップロードした結果です
該当のソースコード
save(data: Product): Promise<any> { return this.upload(data.images).then(images => { console.log(images); // 1. undefind data.images = images; // ここでプロパティを設定し直したい return data; }).then((data: Product) => { console.log("piyo"); // 2. piyo this.firestore.doc<Product>(`products/${id}`).update(data); // 3. error }).catch(err => { console.log('upload failed', err); }); } upload(images: string[]): Promise<string[]> { return images.reduce((promise: Promise<any>, image: string) => { return promise.then((uploadedImages) => { const path = `${new Date().getTime()}`; this.storage.ref(path).putString(image, 'data_url').then(snapshot => { console.log("fuga"); // 4. fuga uploadedImages.push(path); return uploadedImages; }); }); }, Promise.resolve([])); }
補足情報(FW/ツールのバージョンなど)
ストレージはFirebaseを使用しています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/05/21 05:34
2018/05/21 05:45 編集
退会済みユーザー
2018/05/21 05:50