5

我偶然发现了一些与此类似的片段:

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

它是回调地狱的替代品 - 承诺地狱吗?可以将sequential System.imports 展平以使用promise 链接,还是可能存在问题?

4

3 回答 3

10

我建议改为链接,例如

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

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

于 2015-08-15T16:47:52.580 回答
3

由于 System.import 返回一个 Promise,因此使用一组 Promise。我发现它比链接更直接。

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.
});
于 2015-12-18T23:31:33.317 回答
2

在这种情况下我更喜欢 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!!!');
}
于 2019-03-06T02:48:39.270 回答