2017-11-30 8 views
0

イメージパスを読み込んでバイナリデータに変換し、インデックスを追加してから、すべてのファイルが変換された後で何かをしたい。約束はbufferDataオブジェクトの内部で解決されていないように思えオブジェクトの配列の青い鳥の約束を解決する

[ { data: 
Promise { 
    _bitField: 134217728, 
    _fulfillmentHandler0: undefined, 
    _rejectionHandler0: undefined, 
    _promise0: undefined, 
    _receiver0: undefined }, 
index: 0 } ] 

を返し

var bufferData = []; 
    for (var i = 0; i < imagePaths.length; i++) { 
     bufferData.push({ 
      data: fs.readFileAsync(imagePaths[i]), 
      index: i 
      } 
     ); 
    } 


    Promise.all(bufferData).then(function (data) { 
     console.log(data); 
     //do something 
    }); 

:私は、次のコードを持っています。約束を解決するために私は何をする必要がありますか?

[ <Buffer ff d8 ff e1 18 b9 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 09 00 0f 01 02 00 06 00 00 00 7a 00 00 00 10 01 02 00 0e 00 00 00 80 00 00 00 12 01 03 00 ... > ] 

私が欲しいものですが、私は、インデックスを追加することができませんでした:私は

var bufferData = []; 
for (var i = 0; i < imagePaths.length; i++) { 
    bufferData.push(fs.readFileAsync(imagePaths[i])); 
} 


Promise.all(bufferData).then(function (data) { 
    console.log(data); 
    //do something 
}); 

を行う場合

は、それが返されます。

答えて

1

あなたはPromise.allに約束を含むオブジェクトの配列を与えられていますが、それは約束ではありません。あなただけの配列は、実際の約束の配列であることを確認する必要があります。

for (var i = 0; i < imagePaths.length; i++) { 
    var fileIndexPromise = Promise.all([ 
     fs.readFileAsync(imagePaths[i]), 
     i 
    ]) 
    bufferData.push(fileIndexPromise.then(([result, index]) => ({ 
     data: result, 
     index: index 
    }))); 
} 


Promise.all(bufferData).then(function (data) { 
    console.log(data); 
    //do something 
}); 

EDIT:私のオリジナルのポストは、インデックスの不正な値を与えているだろうと私に起こります。これを修正するには、現在のインデックスを約束の一部として含めなければなりません(たとえば、クロージャを使用してアクセスしないなど)。そうでない場合は、すべてimagePaths.lengthに等しくなります。

+0

こんにちは、訂正していただきありがとうございます。あなたのソリューションは理にかなっており、機能します。また、bufferData.push行にa)がありませんでした。 – user3559233

+1

なぜインデックスが必要なのかわからないのですが... 'data [n]'は 'imagePath [n]' promiseの結果になります - インデックスが冗長であるように見える –

+0

ファイルは非同期に読み込まれるので(2番目の画像は1番目の画像の前に読み込まれる可能性がある)、画像パスから来るようにファイルを順序付けしたいと考えています。 – user3559233

関連する問題