2016-11-27 7 views
0

Promise.mapが早期に終了するように見える私の約束のコードに少し問題があります。私はそれが私のロジックに問題があると確信していますが、コードをデバッグする方法がわかりません。Bluebirdの.mapの約束は時期尚早で終了しますか?

現在のところ、それはimgListにプッシュ終了し、これA, A, [*some base64 encoding here*], B.then機能では、imgListは空であってはならない出力するように私はそれを持つことができますどのようにサイズ2のblobList[], B, A, Aを出力しますか?ここで

blobToBase64機能

blobToBase64(blob, cb) { 
    var reader = new window.FileReader(); 
    reader.readAsDataURL(blob); 

    reader.onloadend = function() { 
     let base64data = reader.result; 
     cb(base64data); 
    } 
} 

主な機能

Promise.map(blobList, function(blobObj){ 
    helper.blobToBase64(blobObj.data, (fn) => { 
     imgList.push(fn); 
     console.log('A'); 
    }) 
}).then(function(){ 
    console.log(imgList); 
    console.log('B'); 
}) 

答えて

2

あなたが行く:

var promises = blobList.map((blobObj) => { 
    return new Promise((resolve, reject) => { 
     helper.blobToBase64(blobObj.data, (fn) => { 
      imgList.push(fn); 
      console.log('A'); 
      return resolve(); 
     }) 
    }) 
}) 

Promise 
    .all(promises) 
    .then(() => { 
     console.log(imgList); 
     console.log('B'); 
    }) 
+0

だけを確認するために、変数は複数の約束を保持しているオブジェクトを約束ですか?そして、すべての約束が解決された(または拒否された)ことを確認するためにすべてのチェックを行いますか? – Bryan

+1

変数promisesは約束事の配列です。 .allは配列内の各約束を実行し、すべてが解決されたときにのみ呼び出す関数です – kjonsson

+0

@Bryan、 'helper.blobToBase64()'があなたのものであれば、そこにあることを約束し、シンプル。また、 'Promise.map()'を使用して、 'imgList'がpromise chainの下に配送されるようにすることもできます。厄介な外側var。 –

関連する問題