我希望有一个for循环,每次迭代都会调用异步函数.
在for循环之后,我想执行另一个代码块,但是在for循环中所有先前的调用都已解决之前.
我现在的问题是,在所有异步调用完成之前执行for循环之后的代码块或者根本不执行它.
带有FOR循环的代码部分和后面的代码块(完整代码,请参见小提琴):
[..]
function outerFunction($q, $scope) {
var defer = $q.defer();
readSome($q,$scope).then(function() {
var promise = writeSome($q, $scope.testArray[0])
for (var i=1; i < $scope.testArray.length; i++) {
promise = promise.then(
angular.bind(null, writeSome, $q, $scope.testArray[i])
);
}
// this must not be called before all calls in for-loop have finished
promise = promise.then(function() {
return writeSome($q, "finish").then(function() {
console.log("resolve");
// resolving here after everything has been done, yey!
defer.resolve();
});
});
});
return defer.promise;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个jsFiddle,可以在这里找到http://jsfiddle.net/riemersebastian/B43u6/3/. …
我需要将listB的所有元素合并到另一个列表listA中.
如果listA中已存在一个元素(基于自定义相等检查),我不想添加它.
我不想使用Set,我不想重写equals()和hashCode().
原因是,我不想在listA本身防止重复,我只想在listB中已经存在我认为相等的元素时才从listB合并.
我不想重写equals()和hashCode(),因为这意味着我需要确保,我在各种情况下对元素的equals()实现都有.然而,可能是listB中的元素未完全初始化,即它们可能会遗漏一个对象id,其中可能存在于listA的元素中.
我目前的方法涉及一个接口和一个实用功能:
public interface HasEqualityFunction<T> {
public boolean hasEqualData(T other);
}
public class AppleVariety implements HasEqualityFunction<AppleVariety> {
private String manufacturerName;
private String varietyName;
@Override
public boolean hasEqualData(AppleVariety other) {
return (this.manufacturerName.equals(other.getManufacturerName())
&& this.varietyName.equals(other.getVarietyName()));
}
// ... getter-Methods here
}
public class CollectionUtils {
public static <T extends HasEqualityFunction> void merge(
List<T> listA,
List<T> listB) {
if (listB.isEmpty()) {
return;
}
Predicate<T> exists
= (T x) -> {
return listA.stream().noneMatch(
x::hasEqualData); …Run Code Online (Sandbox Code Playgroud) 我需要做一些数据迁移,这在liquibase变更集中太复杂了.我们用春天
这就是为什么我写了一个实现liquibase.change.custom.CustomTaskChange类的类.然后我从变更集中引用它.
到目前为止一切都很好.
我的问题是: 是否可以从这样的类中访问其他spring bean?
当我尝试在这个类中使用一个自动装配的bean时,它是null,这让我觉得现在根本没有完成自动装配?
我还在其他一些帖子中读到,必须在所有其他bean之前初始化Liquibase bean,这是正确的吗?
这是我写的类的片段:
@Component
public class UpdateJob2 implements CustomTaskChange {
private String param1;
@Autowired
private SomeBean someBean;
@Override
public void execute(Database database) throws CustomChangeException {
try {
List<SomeObject> titleTypes = someBean.getSomeObjects(
param1
);
} catch (Exception e) {
throw new CustomChangeException();
}
...
Run Code Online (Sandbox Code Playgroud)
我得到一个异常,在调试时我可以看到someBean为null.
这是SpringLiquibase的配置:
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@ComponentScan({
"xxx.xxx.."})
public class DatabaseConfiguration {
@Bean
public SpringLiquibase springLiquibase() {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource());
liquibase.setChangeLog("classpath:liquibase-changelog.xml");
return liquibase;
}
... …Run Code Online (Sandbox Code Playgroud) 给定这样的代码行:
[..]
stampsCollector.addStamp(stampId, isFamous, isDamaged, currentlyAvailable, value);
[..]
Run Code Online (Sandbox Code Playgroud)
有没有一种方便的方法可以在Netbeans中将其重新格式化为这种格式?
[..]
stampsCollector.addStamp(
stampId,
isFamous,
isDamaged,
currentlyAvailable,
value
);
[..]
Run Code Online (Sandbox Code Playgroud)
我真的不介意这是如何完成的:例如,在重新格式化保存时,或者通过在每一行中点击自定义键盘快捷键或使用录制的宏...
目前,我不断发现我手动重新格式化大量代码行,这非常耗时。
java ×3
angularjs ×1
collections ×1
deferred ×1
format ×1
java-8 ×1
java-stream ×1
liquibase ×1
netbeans ×1
netbeans-8 ×1
promise ×1
spring ×1