小编Seb*_*mer的帖子

angular $ q,如何在for循环内部和之后链接多个promise

我希望有一个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/. …

promise deferred angularjs angular-promise

75
推荐指数
1
解决办法
8万
查看次数

如果不存在,java 8将ListB的所有元素合并到ListA中

我需要将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)

java collections java-8 java-stream

10
推荐指数
1
解决办法
2085
查看次数

在liquibase CustomTaskChange类中使用其他spring bean

我需要做一些数据迁移,这在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)

java spring liquibase

6
推荐指数
2
解决办法
2824
查看次数

Netbeans 格式化代码行以分成多行

给定这样的代码行:

[..]
    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 format netbeans netbeans-8

3
推荐指数
1
解决办法
8063
查看次数