System.import 承诺链

System.import promise chaining

我偶然发现了一些片段 similar to this one:

  System.import('core-js').then( function() {
    System.import('polymer/mutationobservers').then( function() {
      System.import('aurelia-bootstrapper');
    })
  });

它是回调地狱的替代品 - 承诺地狱吗?顺序 System.import 是否可以展平以利用承诺链,或者可能存在问题?

我建议改为链接,例如

System.import('core-js')
    .then(function(){
        return System.import('polymer/mutationobservers');
    })
    .then(function(){
        return System.import('aurelia-bootstrapper');
    });

当您 return 来自 then 的承诺时,它会在执行下一个 then 之前等待它解决,因此在这种情况下 mutationobservers 必须加载在 aurelia-bootstrapper.

之前

由于 System.import returns 一个承诺,使用一组承诺。我发现它比链接更直接。

Promise.all([
    System.import('core-js'),
    System.import('polymer/mutationobservers'),
    System.import('aurelia-bootstrapper')
]).then(function(modules) {
    var corejs = modules.shift(),
        mutationobservers = modules.shift(),
        aureliaBootstrapper = modules.shift()
    ;

    // You code goes here.
});

在这种情况下我更喜欢 async/await 但是你需要在一个异步函数中,它可能并不总是适用于 import 语句

function async doStuff () {
    await System.import('core-js');
    await System.import('polymer/mutationobservers');
    await System.import('aurelia-bootstrapper');
    console.log('everything done!!!');
}