首页 > 第二句为什么是异步呢?

第二句为什么是异步呢?

define(function (require) {
    // ... 很多代码
    require('a');
    // ... 很多代码
    require(['b'], function (b) {});
    // ... 很多代码
    require('c');
});

require(['b'], function (b) {}); 这句话为什么是异步呢?这里又没有计时器,应该只是一个回调函数吧?并不是异步才对啊


第二句的意思是,加载 b 模块,完成后执行你提供的回调。

这不是异步?

你写的代码是按同步的方式写的(看起来按顺序执行),但事实上回调函数是在未来被调用的(调用者在 require 函数内),所以回调有可能很快被执行,也有可能很慢(取决于 b 模块的加载情况),甚至可能不执行(require 内部在调用它之前抛出异常)。

这就是异步。


还是先把问题分析清楚,别这么早确定是异步问题


这是requirejs或者说AMD规范里的内容,我相信你的示例代码少了东西。
理论上代码应该是这样:

define(['a', 'c'], function (require) {
    // ... 很多代码
    require('a');
    // ... 很多代码
    require(['b'], function (b) {});
    // ... 很多代码
    require('c');
});

ac在加载当前模块前,就已经把definition下载好了,所以直接require可以同步拿到该模块内容。 这种写法,印象中是为了对commonjs规范的代码友好,方便迁移。

b的部分就是纯粹AMD内容,异步加载了。

还是建议先读requirejs的文档

【热门文章】
【热门文章】