javascript - 第二句为什么是异步呢?
怪我咯
怪我咯 2017-04-10 17:49:38
[JavaScript讨论组]
define(function (require) {
    // ... 很多代码
    require('a');
    // ... 很多代码
    require(['b'], function (b) {});
    // ... 很多代码
    require('c');
});

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
怪我咯

第二句的意思是,加载 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的文档

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号