【问题标题】:Load async resource with requirejs timeout使用 requirejs 超时加载异步资源
【发布时间】:2013-08-05 21:02:02
【问题描述】:

我尝试使用 requirejs 和异步插件加载适用于 JavaScript 的 Google API 客户端库:

require.config({
    paths : {
        async : '../lib/requirejs/async'
    },
    waitSeconds: 60
});

define('gapi', ['async!https://apis.google.com/js/client.js!callback'],
    function(){
        console.log('gapi loaded');
        return gapi.client;
    }
);

require(['gapi'], function(){
    console.log("Callback");
    console.log(gapi);
});

load this library 的常用方式是

<script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>

所有内容都在不到 2 秒的时间内加载,但我总是收到此错误:

Uncaught Error: Load timeout for modules: async!https://apis.google.com/js/client.js!callback_unnormalized2,async!https://apis.google.com/js/client.js!callback
http://requirejs.org/docs/errors.html#timeout 

【问题讨论】:

  • 请问在使用 r.js(requirejs 优化器)优化后,您在哪里可以得到这个工作?,对我来说它工作正常,但优化后它没有。
  • ^^ 优化后解决了吗?

标签: javascript requirejs


【解决方案1】:

TL;DR;!callback 更改为 !onload 以解决超时问题。

define('gapi', ['async!https://apis.google.com/js/client.js!onload'],
    function(){
        console.log('gapi loaded');
        return gapi.client;
    }
);

! 之后的值用作异步回调的参数名称,在这种情况下,加载的 URI 将类似于 https://apis.google.com/js/client.js?onload=__async_req_3__ 其中__async_req_3__ 是一个全局变量(回调函数),一旦触发Google API 已加载(通知插件所有依赖项都已满足)。

【讨论】:

  • 您可能只需要返回gapi,而不是gapi.client
  • 我已经尝试过了,如果我没有使用 grunt 进行构建,它可以工作,但是一旦我使用 grunt 构建,它会将 gapi 对象标记为未定义。
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 2015-08-22
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
相关资源
最近更新 更多