我在ASP.NET MVC 4上使用Angular JS,我使用脚本捆绑从cdn加载,并且在cdn失败的情况下也从原始服务器加载,如下所示:
var jQuery = new ScriptBundle("~/bundles/scripts/jquery",
"//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js") // CDN
.Include("~/Scripts/jquery-{version}.js"); // Local fallback
jQuery.CdnFallbackExpression = "window.jQuery"; // Test existence
bundles.Add(jQuery);
Run Code Online (Sandbox Code Playgroud)
和
var angular = new ScriptBundle("~/bundles/scripts/angular",
"//ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.min.js")
.Include("~/Scripts/angular.js");
angular.CdnFallbackExpression = "window.angular";
bundles.Add(angular);
Run Code Online (Sandbox Code Playgroud)
使用window.jQuery和window.Angular分别检测jQuery或AngularJS是否相当容易.ASP.NET捆绑机制评估CdnFallbackExpression文本以查看它是否需要回退到源服务器.
但是,在AngularJS的更高版本中,其他模块(如ngRoute和ngResource)被分成自己的文件,由开发人员自行决定加载.
如何检测是否加载了其他AngularJS模块?我可以在控制台中输入什么来查看ngAnimate,ngRoute,ngResource等是否成功从CDN加载?
给出以下两个$resource例子:
var exampleOne = $resource('/path').save(objectOne);
exampleOne.$promise.then(function (success) {}, function (error) {});
var exampleTwo = $resource('/path').save(objectTwo);
exampleTwo.$promise.then(function (success) {});
Run Code Online (Sandbox Code Playgroud)
[注意:示例二不包含错误处理程序]
以及位于所有$http请求下方的拦截器:
var interceptor = ['$location', '$q', function ($location, $q) {
function error(response) {
if (response.status === 400) {
return $q.reject(response);
}
else {
$location.path('/error/page');
}
return $q.reject(response);
}
return {
'responseError': error
};
}
$httpProvider.interceptors.push(interceptor);
Run Code Online (Sandbox Code Playgroud)
当示例资源不$promise.then()包含错误回调时,如何使拦截器不被拒绝?如果回调存在,exampleOne那么我希望拒绝,但如果没有,exampleTwo那么我希望重定向到错误页面,从而将条件更改为:
if (response.status === 400 && $q.unresolvedPromises.doIndeedExist()) { ...
Run Code Online (Sandbox Code Playgroud)
为什么?因为我的项目中只有一些情况需要以400用户友好的方式处理,所以我想消除许多重复的错误回调或者必须在拦截器中放置一个不常见的情况列表.我希望拦截器能够根据promise链中另一个处理程序的存在来决定.
假设我在Azure中有一个自动部署连续webjob的webapp.此webapp还有一个production和staging插槽,并且站点部署到staging,之后发生交换(手动或自动)以将最新的移动到production插槽中.
此外,我们假设productionwebjob正在运行和处理,并且通常在交换开始之前完成它的工作.当部署staging发生时,由于WEBJOBS_STOPPED = 1受到尊重的配置设置,最新的webjob无法启动.
但是,在交换完成之后,以前进入production并且现在正在staging继续运行的webjob是什么?如果没有,它是如何停止的?什么时候停止?当WEBJOBS_STOPPED正在运行的webjob从production插槽移动到staging slot?时,标志何时开始被尊重?
我不能在同一时间运行两个webjobs和目前还不清楚周围的交换行为是什么...连续单身很容易使用is_singleton的webjob设置属性,但"垂直" webjobs在围绕同一时间运行交换似乎没有被清楚地理解或记录.