【发布时间】:2014-06-05 22:51:49
【问题描述】:
我有以下场景...
$.when(
$.getScript('script.js')
).done(function () {
if ( scriptIsAlreadyLoaded ) {
// I want to cancel this promise.
// I no longer want script.js because
// it has already been loaded in another
// instance.
}
// I dont' want this to run if the above
// condition is true.
doStuff();
});
我知道在 done() 内部这样做没有多大意义,因为根据定义,取消承诺为时已晚。
那么这里最好的方法是什么?
注意:这个 sn-p 可以执行多次。这就是为什么我想避免脚本被多次加载。
【问题讨论】:
-
呃……在完成里面已经……完成了。我根本不明白你想要完成什么。只需保留一个布尔标志并用
if包围$.when。 -
使用 $.getScript 会自动解析脚本,所以即使你取消它,它也已经被加载了,所以这没有任何意义。
-
另外,除了@adeneo 所说的浏览器缓存脚本(除非您的服务器发送不正确的缓存头),所以它不会再次发出请求。
-
另外,它似乎可以像 -> jsfiddle.net/y76Be
-
@BenjaminGruenbaum,我知道它在
done()函数中没有意义(我在帖子中承认了这一点)。我希望我能得到一个真正有意义的替代方案的建议。
标签: jquery promise jquery-deferred cancellation