我正在尝试编写一个返回promise的函数.但有时候请求的信息是立即可用的.我想将它包装在一个承诺中,以便消费者不需要做出决定.
function getSomething(id) {
if (Cache[id]) {
var deferred = $q.defer();
deferred.resolve(Cache[id]); // <-- Can I do this?
return deferred.promise;
} else {
return $http.get('/someUrl', {id:id});
}
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
somethingService.getSomething(5).then(function(thing) {
alert(thing);
});
Run Code Online (Sandbox Code Playgroud)
问题是回调不会针对预解析的承诺执行.这是合法的事吗?有没有更好的方法来处理这种情况?
我正在构建HTML格式的PDF列表.在列表中,我想要包含下载链接和打印按钮/链接.有没有办法在没有用户看到PDF或打开PDF查看器的情况下直接打开PDF的"打印"对话框?
将PDF下载到隐藏的iframe并触发使用JavaScript打印的一些变体?
在Visual Studio 2013 Update 3中,我意外地检查了一个未编译的,正在进行中的变更集,我打算将其搁置以供同事使用.我马上回滚了变更集.不好意思
有没有办法将这个糟糕/回滚的变更集恢复为待定变更,以便我(或我的同事)可以继续使用它?我没有在UI中看到任何内容,必须手动拉出每个文件并手动构建挂起的更改.最初编码它只需20分钟,所以没有那么大的交易(这是我的错误),但我很好奇是否有更好的方法.
使用AngularJS,我试图对一个多次调用$ http的函数进行单元测试.
我的测试看起来像这样:
it('traverses over a hierarchical structure over multiple chained calls', function() {
myService.traverseTheStuff()
.then(function(theAggregateResult) {
// ...is never fulfilled
});
$httpBackend.flush();
});
Run Code Online (Sandbox Code Playgroud)
其他单调用测试将注册传递给.then()的回调,并在我调用.flush()后立即执行.
测试中的代码看起来像这样.
function traverseTheStuff(){
// This will make a call to $http to fetch some data
return getRootData()
// It is fulfilled at the end of the test when I $httpBackend.flush()
.then(function(rootData){
// Another call to $http happens AFTER $httpBackend.flush()
return getNextLevel(rootData.someReference);
})
// The second promise is never fulfilled and the test fails
.then(function(nextLevel){
return …
Run Code Online (Sandbox Code Playgroud) 我们的团队正在进入TDD并努力进行单元测试的最佳实践.我们的测试代码使用依赖注入.我们的测试通常遵循Arrange-Act-Assert类型的布局,其中我们使用Moq在Arrange部分中模拟依赖关系.
从理论上讲,单元测试应该是一个屏蔽,可以在您重构时保护您.但它正在变成一个阻止我们这样做的锚.我正在努力确定我们的流程失败的地方.
考虑简化的例子:
我预计控制器测试并没有需要进行重构,而是证明给我看我的新控制器实现荣誉的不变的合同.但我们在这里失败了,因为事实并非如此.
每个控制器测试都会动态地模拟存储库接口.他们都需要改变.此外,由于每个测试都不想模拟所有接口和方法,我们发现我们的测试与特定实现相关联,因为它需要知道要模拟的方法.
对于我们拥有的更多测试,重构变得越来越难以实现!或者更准确地说,我们模拟界面的次数越多.
所以我的问题:
是否有偏好在每个测试中使用动态模拟,而不是为每个界面制作可重复使用的手工模拟?
鉴于我的故事,我错过了一些原则还是陷入了常见的陷阱?
谢谢!
使用Linq to Entities,我试图查询Log表以查找匹配行附近的行.我在查询中添加日期时遇到问题.这就是我到目前为止所拥有的.
from
l in objectSet.Logs
let
match = objectSet.Logs.Where(whatever).FirstOrDefault()
where
l.Timestamp > (match.Timestamp - twoHours)
&& l.Timestamp < (match.Timestamp + twoHours)
select
l
Run Code Online (Sandbox Code Playgroud)
离开找到我感兴趣的行的"无论"条件,"twoHours"可变地是时间跨度,.AddHours()
功能等等.我没有找到EF生成SQL的正确方法,该方法将字段(match.Timestamp)的值添加到常量.
显而易见的解决方案是首先执行"匹配"查询,然后在第二个查询中使用文字值,但我已将此处的代码示例简化为主要问题(在查询中添加日期),实际上我的查询更多复杂,这不是理想的.
干杯
在.NET中,有一种简单的方法可以检查当前用户是否有权在目录中创建文件?相当于C++ _access函数的东西是理想的.
我不想使用反复试验(创建一个虚拟文件然后删除它):除了看似hackish之外,其他软件正在监视有问题的目录以查找丢弃的文件.
我不想使用System.DirectoryServices:查看ACL,解析组成员身份以及来自不同组成员身份的权限如何交互似乎容易出错且太难.某处肯定有一个好的或不可能的功能,不是吗?
提前致谢!
[编辑]作为奖励,如果它也适用于网络共享,那就太酷了.
是否有在线资源或数据库允许查找与Java类等效的C#,反之亦然?
我一直在移植代码,并且一直在谷歌搜索一个单独的类; 它变得有点乏味.8道^ J
干杯
我正在用C#编写PowerShell提供程序.提供程序通过类似驱动器的接口公开应用程序域对象.例如:
my:\Users\joe@blow.com
my:\Customers\Marty
Run Code Online (Sandbox Code Playgroud)
这些数据最终来自数据库.
我一直无法找到任何有关何时应该访问数据库以及何时应该缓存数据的指导.我发现PowerShell多次调用ItemExists和GetChildNames之类的方法; 经常反复为同一个命令.例如,仅仅因为他们点击Tab进行自动完成而去数据库5到6次是不切实际的.
但与此同时,作为命令提示符下的用户,如果我键入Get-ChildItem
(dir
)并查看列表,那么在PowerShell外部执行一些操作以便我知道数据已刷新,另一个目录列表应该会看到任何更改数据库.
我觉得,如果我知道用正确的术语来描述我的问题(用PowerShell的说法),我可以谷歌答案或找到一个现有的重复问题,但我卡住了.
在以下语句中,将f1
始终获得f2
以前的值?或者f2
有时会先更新并f1
最终结束NULL
?我的印象是声明中的新值不可用,f2
在处理记录时具有旧值,但我找不到一个说明这一点的权威位置.
UPDATE x
SET
x.f1 = x.f2,
x.f2 = NULL
Run Code Online (Sandbox Code Playgroud) angularjs ×2
promise ×2
unit-testing ×2
.net ×1
c# ×1
jasmine ×1
java ×1
javascript ×1
mocking ×1
moq ×1
pdf ×1
permissions ×1
powershell ×1
rollback ×1
sql ×1
sql-server ×1
tfs ×1