在JavaScript中,setTimeout(callback, delay)意思是" callback在delay毫秒之后调用".但是如果delay是的话0呢?它应该立即打电话callback吗?
我很困惑因为我在运行以下代码时看到的内容:
setTimeout(function() {
console.log('AAA');
}, 0); // Call this in 0 milliseconds
for (i = 0; i < 1000; i++) {
console.log('BBB');
}
for (i = 0; i < 1000; i++) {
console.log('CCC');
}
for (i = 0; i < 1000; i++) {
console.log('DDD');
}
for (i = 0; i < 1000; i++) {
console.log('EEE');
}
Run Code Online (Sandbox Code Playgroud)
这会将以下内容记录到控制台:
我希望看到AAA记录的速度要早得多.在console.log应该立即调用的函数之前,有时间执行4000个其他调用.
有人可以解释setTimeout当延迟设置为0毫秒时正在做什么吗?
开发人员喜欢尽可能简短地编写代码.我们在C#中调用WCF服务,并想知道以下直觉是对还是错.使用ChannelFactory代码的一种方法是:
var factory = new ChannelFactory<IService>("Endpoint");
var client = factory.CreateChannel();
client.DoSomething();
((IClientChannel)client).Close();
factory.Close();
Run Code Online (Sandbox Code Playgroud)
其他方式(更清洁一点)是使用包装器对象(用于工厂和通道),它实现了IDisposable两者的配置并在使用块时使用:
using (ServiceWrapper<IService> svcWrapper = new ServiceWrapper<IService>("Endpoint")) {
svcWrapper.Channel.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
在这里,不得不调用包装器的属性对开发人员来说可能有点烦人.基本上也可能是:
using (ServiceWrapper<IService> svcWrapper = new ServiceWrapper<IService>("Endpoint")) {
IService client = svcWrapper.Channel;
client.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
(我也发现这篇MSDN文章说使用块可以隐藏异常)
开发人员可能更喜欢的是:
IService client = new ServiceWrapper<IService>("Endpoint").Channel;
client.DoSomething();
Run Code Online (Sandbox Code Playgroud)
从Nutshell中的C#5.0一书:
一种流行的模式是让终结器调用Dispose.当清理非紧急并通过调用来加速它时,这是有道理的.更多的是优化而非必需.
如果我将它添加到我的ServiceWrapper(C#Finalize/Dispose模式):
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
~ServiceWrapper() {
Dispose(false);
}
Run Code Online (Sandbox Code Playgroud)
然后GC最终会调用Dispose并完成需要完成的事情.即:
public void Dispose(bool disposing) {
if (disposing) {
if (_channel != null) …Run Code Online (Sandbox Code Playgroud) 谁能告诉我,为什么被调试器手柄我的string变量命名Date为DateTime对象?
码:
public class HourRegistration
{
public string Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
看屏幕截图:
使用.NET Framework 4.5,VS-2015
谢谢!
更新:
通过将代码减少到最小可能,我发现了明显的问题.
最小化代码:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DoSomething();
}
public static void DoSomething()
{
DateTime Date = DateTime.ParseExact("asdasd", "dd/MM/yyyy", CultureInfo.InvariantCulture);
}
public class HourRegistration
{
public string Date { get; set; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
它是另一个与字符串完全相同的上下文中的另一个变量,调试器显示了另一个对象的详细信息(基于上下文)
我只是想让 SignalR 设置运行 owin 托管,我想通过 JavaScript 客户端连接。应该很容易吧?我能够快速设置并运行 SignalR 服务器,并将客户端连接到服务器。但是,当在客户端调用 done 回调时,我尝试调用集线器 Send 方法,并且在控制台中收到以下错误:
XMLHttpRequest 无法加载http://localhost:8199/signalr/signalr/send?transport=serverSentEvents& clien …AxBg6iaFwlK50s2DnurE&connectionData=%5B%7B%22name%22%3A%22testhub%22%7D%5D。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' http://localhost '。响应的 HTTP 状态代码为 500。
这是我的服务器端代码:
public static IAppBuilder UseService(this IAppBuilder app)
{
log4net.Config.XmlConfigurator.Configure();
app.UseService(NinjectConfig.CreateKernel);
app.UseLogging();
app.UseSignalr();
return app;
}
Run Code Online (Sandbox Code Playgroud)
internal static IAppBuilder UseSignalr(this IAppBuilder app)
{
app.Map("/signalr", map =>
{
map.UseCors(CorsOptions.AllowAll);
var hubConfig = new HubConfiguration {EnableDetailedErrors = true};
map.RunSignalR(hubConfig);
}
);
return app;
}
Run Code Online (Sandbox Code Playgroud)
这是客户端:
var connection = $.hubConnection('http://localhost:8199/signalr');
var testHub = connection.createHubProxy('testHub');
testHub.on('addMessage', function(name){
console.log(name);
});
connection.start().done(function () …Run Code Online (Sandbox Code Playgroud) 我正在试验一个网页生成工具,在某些情况下,同一个脚本被多次包含在内(由于某些依赖性)。我应该担心它还是在浏览器级别解决了不会多次加载完全相同的文件
页面代码示例:
<script src="../../Scripts/thescript.js"></script>
...
...
<script src="../../Scripts/thescript.js"></script>
...
..
<script src="../../Scripts/thescript.js"></script>
Run Code Online (Sandbox Code Playgroud)
thescript.js会被加载多少次?
这个问题看起来像是将相同的 `<script>` 插入 DOM 两次会导致任何浏览器中的第二个请求的重复 吗?
然而,那是 6 年前,浏览器发生了很大变化,它可能不再相关了,无论如何它都没有接受答案。所以我想保持这个开放,并希望得到一些好的建议。
作为快速测试,我制作了这个小页面代码:
<html>
<head>
<script src='../Scripts/ckeditor/ckeditor.js'></script>
<script src='../Scripts/ckeditor/ckeditor.js'></script>
</head>
<body>
PAGE BODY
<script src='../Scripts/ckeditor/ckeditor.js'></script>
<script src='../Scripts/ckeditor/ckeditor.js'></script>
<script src='../Scripts/ckeditor/ckeditor.js'></script>
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在Chrome(版本:49.0.2623.110 m)中,如果我检查:

我得到了我所希望的。
不是我所希望的。但是加载时间越来越好。
Internet Explorer(版本 11.162.10586.0)

但是,获取 304(未修改)并从缓存加载对我来说看起来不错。
在我看来,今天的浏览器按预期处理此类事情,因此在文档中多次引用完全相同的 js 文件没有问题。除非您为确定是否加载脚本所花费的时间(0.5 - 1 毫秒)感到难过。可能通过文档并“清理”它会使性能比离开它更糟。还有什么意见吗?
有人可以向我解释为什么我需要量角器和业力。乍一看,我觉得他们在做同样的事情。我知道 Karma 用于单元测试,Protractor 用于 e2e 测试。
我知道两者都可以使用(并且在大多数示例中使用)Jasmine 框架来描述测试。
我想有一个右键单击上下文菜单,其中包含点击的点的信息.
即我右键点击地图,得到一个下拉菜单,如果我选择"添加标记"或类似,我需要点击位置.
如果有人可以在右键单击添加一个简单的drpdown菜单,我认为最简单的方法是获得正确的版本 Test Fiddle
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map',
controls: ol.control.defaults({
attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
collapsible: false
})
}),
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
Run Code Online (Sandbox Code Playgroud)
我已经看到了这个解决方案,但它没有成功:https: //gis.stackexchange.com/questions/148428/how-can-i-select-a-feature-in-openlayers-3-by-right -点击它
我有一个List<List<int>> testLists
我想找到最长的一个AND,列表中的数字有最大的区别.我知道有一个内衬Linq,但我似乎无法弄明白.
它必须是这样的:
List<int> myMaxTest = testLists
.OrderByDescending(s => s.Count) // Longest
.ThenBy( s => s.Max(s.Max() - s.Min())) // Biggest Difference
.First(); // Only one list from the top
Run Code Online (Sandbox Code Playgroud)
这是不正确的.它不会编译.我的ThenBy部分不好.你们能告诉我这样做的方法吗?谢谢!
我没有清楚地了解COM(组件对象模型)和WinRT(Windows 运行时)之间的相似/差异或关系本身。
根据我的理解,它们都是为了提供“运行时引擎”来使组件能够进行通信......这是 CLR(公共语言运行时)吗?
WinRT 随 Windows 8 一起出现,为多种语言提供了一个通用平台。
我不明白的是,WinRT 是否取代了 COM?它们是一样的吗?
我有点困惑,也许我在看错了地方,请赐教!我正在查看msdn的System.ValueType类的descpription,它在继承层次结构中显示以下内容:
-- System.Object
?? -- System.ValueType
?-- System.Enum
Run Code Online (Sandbox Code Playgroud)
然而,类定义并未声明该类继承任何东西
public abstract class ValueType
Run Code Online (Sandbox Code Playgroud)
尽管如此,班级确实会覆盖Equals,GetHashCode并且ToString.我没看到这里的全貌,这让我感到困惑.
有一个A具有 Nullable 属性的类Prop
public class A {
int? Prop {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
...
我
有条件a类型的对象A:
if (a != null && a.Prop.HasValue) { // <--
int res = a.Prop;
}
Run Code Online (Sandbox Code Playgroud)
我收到建议 "Merge sequential checks"
我不明白我怎么能那样做。a?.Prop.HasValue不管用
我在这里缺少什么?
我想要这样的东西:
let myMap = new Map<string, any>();
myMap.set("aaa", {a: 1, b: 2, c:3});
myMap.set("bbb", {a: 1, b: 2, c:6});
myMap.set("ccc", {a: 1, b: 2, c:9});
let cs = myMap.values().map(x => x.c);
Run Code Online (Sandbox Code Playgroud)
从地图的所有条目中选择 c 属性。这是失败的:
Property 'map' does not exist on type 'IterableIterator<any>'.
Run Code Online (Sandbox Code Playgroud)
有什么优雅的解决方案吗?
c# ×6
.net ×5
javascript ×5
angularjs ×1
com ×1
datetime ×1
dictionary ×1
firefox ×1
html ×1
inheritance ×1
linq ×1
oop ×1
openlayers-3 ×1
protractor ×1
resharper ×1
settimeout ×1
signalr ×1
typescript ×1
unit-testing ×1
wcf ×1