RxJava - 如何避免这种竞争条件?

问题描述 投票:0回答:0

我正在尝试在我的

Completeable
的构造函数中使用
ViewModel

在后台线程上将一些数据插入本地数据库
public MainViewModel() extends ViewModel {

    public MainViewModel(){
        localRepository.insertValueIntoDatabase().subscribeOn(Schedulers.io())
                    .subscribe(() -> {
                        sharedPrefManager.setAnotherValue(true);
                    }, throwable -> {
                        Timber.e(throwable, "Failed to insert into DB");
                    });
    }
}

在我的

MainActivity
中,我也在构建
MainViewModel
之后调用一个方法,该方法将根据构造函数中插入的值执行查询。

viewModel = new ViewModelProvider(this).get(MainViewModel.class);
viewModel.performQueryWithValue();
public MainViewModel() extends ViewModel {

    public MainViewModel(){
        localRepository.insertValueIntoDatabase().subscribeOn(Schedulers.io())
                    .subscribe(() -> {
                        sharedPrefManager.setAnotherValue(true);
                    }, throwable -> {
                        Timber.e(throwable, "Failed to insert into DB");
                    });
    }

    public void performQueryWithValue(){
        localRepository.getValueFromDatabase().flatMapSingle(value -> {
             if(value == 0){
                return remoteRepository.performQueryOne();
             }else{
                return remoteRepositoru.performQueryTwo();
             }

        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(result-> {
                   
                    
        }, err -> {
            
        });
    }
}

如果

 localRepository.insertValueIntoDatabase()
需要10秒才能插入,

如何让

performQueryWithValue()
方法在执行查询之前等待插入完成?

android rx-java rx-java2
© www.soinside.com 2019 - 2024. All rights reserved.