2017-06-13 4 views
2

私は2つの機能があります。入力ファイルの配列をどのようにマップするのですか?

fileToDataURL(file) { 
    var reader = new FileReader() 
    return new Promise(function (resolve, reject) { 
    reader.onload = function (event) { 
     resolve(event.target.result) 
    } 
    reader.readAsDataURL(file) 
    }) 
} 

getDataURLs (target) { 
    // target => <input type="file" id="file">  
    return Promise.all(target.files.map(fileToDataURL)) 
} 

返しtarget.files.map:TypeError: target.files.map is not a functionをdataUrlにファイルをオンにし、別の結果との約束を返すというものを。 H

getDataUrlsを変更するには、dataUrlsを使用して配列を返しますか?

答えて

5
function getDataURLs(target) { 
    // target => <input type="file" id="file">  
    return Promise.all([...target.files].map(fileToDataURL)) 
} 

FileListArrayではない、とArrayから継承していないが、それは反復可能なクラスですので、あなたは配列としてそれを得るためにspread operatorを使用することができます。

あなたはFileListのようなクラスが広がり演算子をサポートしているかどうかを確認する方法を迷っている場合は、あなたがこれを行うことができます:それはそれがない機能を(返す場合

console.log(FileList.prototype[Symbol.iterator]);

を)、返される関数は、スプレッド演算子によって呼び出されるgeneratorです。

+0

ありがとうございます!私はJavaScriptを4年間書いており、あなたは中国語を話しているように感じています。 – alex

+0

さて、私は不明な点についてのリンクを提供しました。うまくいけば、私がカバーしているものすべてを明確にする必要があります。 –

関連する問題