我在寻找承诺的使用方面存在问题,也承认我对承诺的理解是非常基础的。据我所知,它们似乎只是模仿同步行为。

是否可以使用promises并保持异步行为,然后在它们全部完成后再使用then()?

这样的...

var fileRegister = [ 'fileA', 'fileB', 'fileC' ];

for( i in fileRegister ) {
  asyncLoadFile( fileRegister[ i ], function( err, data ) {
    delete fileRegister[ i ];
    if ( ! fileRegister.length ) {
      console.log('done');
    }
  });
}

最佳答案

是的,您可以使用Promise.all等待多个承诺:

var fileRegister = [ 'fileA', 'fileB', 'fileC' ];

// returns a promise for a file
function loadFile(filename) {
    return new Promise(function (resolve, reject) {
        asyncLoadFile(filename, function (err, data) {
            if (err) {
                reject(err);
            }
            resolve(data);
        });
    });
}

Promise.all(fileRegister.map(loadFile))
    .then(function (files) {
        console.log("done");
    });

08-07 15:54