我看了很多使用这种语法的样本,但我看不出我做错了什么."then"函数在ajax调用返回之前运行.
我也试过使用$ .deferred和其他一些模式无济于事.
有人能看到我错过的东西吗?
我已经调试过,可以在ajax调用返回成功(或错误)数据之前看到在done/then内部进行的调用.
谢谢你的帮助.
主要电话:
this.addFirstTask = function(task) {
var totalHours = GetHours();
$.when(totalHours).done(function (data) {
task.TaskHours(data);
self.add(task);
});
};
Run Code Online (Sandbox Code Playgroud)
它调用以下ajax函数:
function GetHours() {
$.ajax({
url: "/api/tst/GetMyData",
type: 'GET',
dataType: 'json',
success: function(data) {
return data;
},
error: function(data) {
return 0;
}
});
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
验尸:
除了将返回添加到ajax调用之外,根据其他建议,我从ajax调用中删除了成功和错误,并将addFirstTask更改为:
this.addFirstTask = function(task) {
var totalHours = GetHours();
$.when(totalHours)
.then(function (data) {task.TaskHours(data);})
.done(function () { self.add(task); });
};
Run Code Online (Sandbox Code Playgroud)
如果GetHours成功,我更新TaskHours值.如果失败了,我就跳过它.我意识到DONE就像.NET的try/catch中的"FINALLY".因此,不是立即添加任务,然后让我的可观察绑定在值返回时更新它,即使self.add也是异步调用的一部分.
我有一个性能问题,我们做了一堆分析,并被卡住了.希望你们其中一个人之前见过这个.
我调用DbContext.Database.SqlQuery数据库部分需要3ms,但完整执行需要9秒.
我们使用EF Profiler来发现这一点,我们也直接在SQL Server Management Studio中运行SQL,它是即时的.
我们也使用了一瞥而无法深入了解这个过程.
结果类型不是模型中的实体,因此我们确信不涉及跟踪.
我们也知道这不是针对上下文执行的第一个查询,因此我们不会在此查询上支付EF启动成本.
我们尝试过.net分析器,运行它有很多问题我们决定我们应该问.
有关如何挖掘和解决这个问题的任何提示?
编辑:此查询的结果集是1行,4列(十进制)
代码行只是:
var list=contextInstance.Database.SqlQuery<nonEntityType>(sqstring).ToList();
Run Code Online (Sandbox Code Playgroud)
SQL本身不是一个很长的字符串.我们将使用更详细的分析器来找出过程中的这个问题.
(请参阅下面的我自己的回答,让我在让这个渗透天数和天数后想出来)我试图在WPF中实现以下场景.
我有一个数据网格,显示数据行以供查看和附加数据输入.这是一个新的应用程序,但有遗留数据.
过去的一个特定领域已随机输入数据.现在我们要将该字段的值限制为特定列表.所以我正在使用DataGridComboBoxColumn.FWIW我或者用包含ComboBox的DataGridTemplateColumn尝试了这个.
在运行时,如果现有值不在列表中,我希望它仍然显示.我似乎无法实现这一点.虽然我尝试了大量的解决方案(所有失败),但这里是最合乎逻辑的解决方案.
下拉列表的值列表在名为"months"的Windows资源中定义.
<DataGridComboBoxColumn x:Name="frequencyCombo" MinWidth="100" Header="Frequency"
ItemsSource="{Binding Source={StaticResource months}}"
SelectedValueBinding="{Binding Path=Frequency,UpdateSourceTrigger=PropertyChanged}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="IsSynchronizedWithCurrentItem" Value="False" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>
Run Code Online (Sandbox Code Playgroud)
发生的事情是,如果列表中没有值,则显示为空白.我在运行时验证过IsSynchronizedWithCurrentItem元素确实是False.它只是没有做我期待的事情.
也许我只是走错了路.也许我需要将文本框与组合框结合使用.也许我需要编写一些代码,而不仅仅是XAML.我花了好几个小时尝试不同的事情,并且非常感谢解决方案.我有一些建议使用这个类或那个控件但没有解释如何使用它.
谢谢你!