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

回答編集履歴

1

追記

2020/04/29 19:47

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -6,4 +6,43 @@
6
6
  > [古いコールバック API をラップする Promise の作成](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Using_promises#Creating_a_Promise_around_an_old_callback_API)セクションより
7
7
  > ベストプラクティスは、問題のある関数を可能な限り低いレベルでラップした上で、二度と直接呼ばない
8
8
 
9
- ご質問コードの[Compressor.js](https://github.com/fengyuanchen/compressorjs) による圧縮機能だけをPromise化するのが良いと思います
9
+ ご質問コードの[Compressor.js](https://github.com/fengyuanchen/compressorjs) による圧縮機能だけをPromise化するのが良いと思います
10
+
11
+ ----
12
+ 追記)以下、試していませんので、答案に過ぎませんが…。
13
+
14
+ ```javascript
15
+ const promisfiedCompressor = ( file, q=0.6 ) => {
16
+ // Promise を返却
17
+ return new Promise((resolve, reject) => {
18
+
19
+ new Compressor(file, {
20
+ quality: q,
21
+ success(blob) {
22
+ resolve(blob); // Promise を 成功終了
23
+ },
24
+ error(err) {
25
+ reject(err); // Promise を 異常終了
26
+ }
27
+ }); // Compressor.js
28
+
29
+ });
30
+ }
31
+
32
+ /*
33
+ 動作確認
34
+ // {Promise}.then() の場合
35
+ promisfiedCompressor(file) // Promise が返却される
36
+ .then( blob => {
37
+ firebase
38
+ .storage()
39
+ .ref()
40
+ .child("work/" + uid + "/1/" + name)
41
+ .put(blob);
42
+ });
43
+
44
+ // await を使う方法も考えられる(割愛)
45
+ */
46
+
47
+ // module として export
48
+ ```