gpt4 book ai didi

javascript - 当外部包不可用并且仍然运行 domReady 时,有没有办法优雅地失败?

转载 作者:行者123 更新时间:2023-11-30 17:05:46 24 4
gpt4 key购买 nike

我正在 Dojo 1.7.2 中创建一个共享栏小部件,并使用 require() 有条件地将外部社交媒体 API 作为包加载,如下所示:

require({
packages:[
{name: "twitter-api", location: "https://platform.twitter.com", main: "widgets"}
]
},["twitter-api"], lang.hitch(this, function(){
// Do some social stuff with twitter API
}));

每当我可以访问 Twitter API 时,这都非常有效,但现在我正在通过专用网络测试它,我不能。问题不在于小部件无法正常工作。相反,我有一些额外的代码从 ready() 中运行,对于 domReady() 也是如此,在尝试加载这个包但加载失败后调用。

我对 Dojo 文档进行了一些挖掘以弄清楚为什么我的 ready 没有触发并遇到了这个推理(domReady):

Now comes along dojo/domReady!. The loader loads all the dependencies for dojo/domReady! and then demands the plugin resource be resolved. But dojo/domReady! may not be able to resolve the demanded plugin resource (an empty module ID which is intended to signal the DOM is ready) because the DOM may not be ready. The loader notices this an sees that the module was not capable of being loaded synchronously, gives up and continues.

This is an intentional limitation in the loader, since handling it would have required more complicated code. It will cease to be an issue for Dojo 2.0, when the synchronous loader is desupported.

根据我收集到的信息,只要无法加载依赖项,Dojo 就会停止尝试。这很好,但是是否有任何方法可以优雅地处理外部库不可用的情况?

我认为也许有一些方法可以通过 XHR 调用来完成,但这会导致跨源问题。我唯一的其他解决方案是将它们添加为单独的脚本标签,这是加载其他一些库的方式;但由于这个模块现在正在重构,我想尝试让它尽可能与 AMD 兼容。

最佳答案

你可以创建一个promise,当require成功的时候resolve它;并在 promise 的错误处理程序中优雅地失败:

require(["dojo/Deferred"], function(Deferred){
var d = new Deferred();
require(['twitter-api'], function(twitterApi){
d.resolve(twitterApi);
});
d.then(function(api){
// use api
}, function(err){
// fail gracefully
});
return d.promise;
});

关于javascript - 当外部包不可用并且仍然运行 domReady 时,有没有办法优雅地失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28074795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com