首页 > 解决方案 > Promise.all 在执行所有解析之前触发

问题描述

我有以下代码:

  const promises = [];
  const gltfLoader = new THREE.GLTFLoader(manager);
  for (const model of Object.values(tmodels)) {
    promises.push(processTransformModel(model));
  }

  Promise.all(promises)
      .then(() => {
        manager.onLoad = function () {
          loadAttachModels();
        };
      })
      .catch((e) => {
        // handle errors here
      });

  function processTransformModel(model) {
    new Promise( function( resolve, reject ) {
      if ( model.url.match( /\.zip$/ ) ) {
        new THREE.ZipLoader().load( model.url ).then( function( zip ) {
          manager.setURLModifier( zip.urlResolver );
          resolve( zip.find( /\.(gltf|glb)$/i )[ 0 ] );
        } );
      } else {
        resolve( url );
      }
    } ).then( function ( file ) {
      gltfLoader.load(file, (gltf) => {
        //do stuff with gltf
    } );
  }

有两个gltf文件要加载,一个小,一个大。大的首先添加到数组中。我已经追踪了一点代码。在调用“Promise.all”之前,Promises 数组是完整的(两个元素)。但是“Promise.all”总是在执行小文件解析后触发。大文件解析总是在“Promise.al”被触发后执行。

我无法弄清楚发生了什么。

标签: javascriptpromise

解决方案


推荐阅读