私には約束があり、内なる約束が解決されたときにのみ解決したいと考えています。現在、「loadend」コールバックで「resolve」関数に到達する前に解決されます。
私は何が欠けていますか?resolve を使用する方法と、別の promise 内で promise を使用する方法について混乱しています。
ウェブ上で役立つものは何も見つかりませんでした。
次の例では、基本的に一連のファイルをロードします。ファイルごとに blob を取得し、この blob をファイル リーダーに渡します。
すべてのファイルがファイル リーダーに渡されたら、Promise チェーンの次の関数に移動します。
現在、解決が呼び出されるのを待たずに、チェーン内の次の関数に進みます。
var list = [];
var urls = this.files;
urls.forEach(function(url, i) {
list.push(
fetch(url).then(function(response) {
response.blob().then(function(buffer) {
var promise = new Promise(
function(resolve) {
var myReader = new FileReader();
myReader.addEventListener('loadend', function(e) {
// some time consuming operations
...
window.console.log('yo');
resolve('yo');
});
//start the reading process.
myReader.readAsArrayBuffer(buffer);
});
promise.then(function() {
window.console.log('smooth');
return 'smooth';
});
});
})
);
});
...
// run the promise...
Promise
.all(list)
.then(function(message){
window.console.log('so what...?');
})
.catch(function(error) {
window.console.log(error);
});