编程语言
首页 > 编程语言> > javascript – 卷曲’承诺已完成’错误

javascript – 卷曲’承诺已完成’错误

作者:互联网

我正在测试各种异步资源加载器,看看我想要使用哪一个.目前Curl正在抛出一个“承诺已经完成”错误……他们的文档说’这应该永远不会发生’.

我“怀疑”我必须在每个被加载的文件中使用’define'(希望不是).此外,他们的文档说Curl可以使用非AMD的JavaScript文件.但是……我是AMD的新手,因为Curl比我正在测试的其他产品要快得多……我愿意花些时间更好地理解这一点.

最后…

即使FireBug显示错误……所有文件仍然异步加载!但是,由于存在错误……代码的“当时”部分永远不会被调用.

所以我的问题是:

>我是否必须更新要包含在’define’中的所有JavaScript文件对象? (…希望不是)
>你能在语法上看到任何其他问题吗?

Head的代码看起来像这样:

<script type="text/javascript">
    ///<summary>Configuration</summary>
    curl = { baseUrl: 'Includes/JavaScript/' };
</script>
<script src="Loaders/Curl/curl.js" type="text/javascript"></script>
<script type="text/javascript">

    function onSuccess() {
    }
    function one rror(ex) {
        //alert(ex);
    }

    require(["MooTools/Core/mootools-1.2.2-core-jm",
        "MooTools/mGeneral",
        "jQuery/Core/jquery-1.3.2",
        "jQuery/Core/jquery.tools.min",
        "jQuery/ThirdPartyPlugIns/jquery.tmpl"])
        .then(onSuccess, one rror);

    //require(["jQuery/TopUp/top_up-min"], null);

    require(["jQuery/ThirdPartyPlugIns/jquery.dimensions",
        "jQuery/ThirdPartyPlugIns/jQuery.Color.Animations",
        "jQuery/ThirdPartyPlugIns/jquery.corners.min",
        "jQuery/ThirdPartyPlugIns/jquery.tipsy",
        "jQuery/ThirdPartyPlugIns/jquery.numberformatter-1.1.0",
        "jQuery/ThirdPartyPlugIns/jquery.tipsy"]);

    require(["general",
        "WindowCenter",
        "ThirdPartyPlugin/KeyBoardCapture",
        "ThirdPartyPlugin/bsn.AutoSuggest_2.1.3",
        "ee/8Ball",
        "ee/EE"]);
</script>

再次……我确信它是由于缺乏AMD风格代码的经验造成的,但我仍然需要帮助…所以任何人都表示赞赏.

解决方法:

通常,如果这些模块没有依赖项,则应将模块包装在define()中或在文件末尾附加define().但是,似乎这些模块都依赖于jQuery,如果不是其他模块/文件.

由于您没有使用标准的AMD require()/ define()协议,因此AMD并没有真正帮助您使用这些模块.除非您打算使用define()编写自己的模块,否则您可以使用任何异步加载器.

也就是说,有一种方法可以使curl.js与非AMD模块/文件一起使用.使用js!插入.这是您翻译为使用js的第一个文件块!插件(注意我还添加了“.js”ext,我喜欢使用非模块):

// we load the core files first, then get the next block that depends on them
curl([
    "js!MooTools/Core/mootools-1.2.2-core-jm.js",
    "js!jQuery/Core/jquery-1.3.2.js"
]).next([
    "js!MooTools/mGeneral.js",
    "js!jQuery/Core/jquery.tools.min.js",
    "js!jQuery/ThirdPartyPlugIns/jquery.tmpl.js"
]).then(onSuccess, one rror);

如果每个阵列中的任何文件相互依赖,您还可以在它们上使用!order后缀,以确保它们在执行/评估之前等待其他文件(但请确保您正在设置正确的缓存标头).实际上,只要没有缓存问题(移动浏览器在文件大小上添加一些额外的约束),!order后缀是最快的方法.

还有其他错误消息吗?具体来说,我希望curl.js除了“Promise not completed”之外至少抛出一个错误.

此外,请检查网络选项卡(Firebug)或网络选项卡(Chrome),以检查curl.js是否正在查找模块的正确位置.

FWIW,我打算删除别名要求 – >卷曲.原因是全局需求函数是非标准的(并且在AMD提议中明确没有标准化).我建议你使用curl()而不是require().

curl.js还允许它的顶级api通过“apiName”配置参数显式别名,如果你真的,真的想使用名称“require”.

标签:javascript,asynchronous,curl,requirejs,labjs
来源: https://codeday.me/bug/20190710/1419650.html