9

私には約束があり、内なる約束が解決されたときにのみ解決したいと考えています。現在、「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);
    });
4

1 に答える 1