RxJavaでは、データリスト上で非同期メソッドを順次実行する方法はありますか?以下の方法で順次オブジェクトの配列を超える関数を呼び出すことが可能であるNode.jsのAsyncモジュールを使用してRxJavaで非同期メソッドを同期する方法は? RxJavaの非同期ウォーターフォール
は:
var dataArray = ['file1','file2','file3']; // array of arguments
var processor = function(filePath, callback) { // function to call on dataArray's arguments
fs.access(filePath, function(err) { // perform an async operation
// process next item in dataArray only after the following line is called
callback(null, !err)
}
};
async.every(dataArray, processor, function(err, result) {
// process results
});
何これについての素晴らしいのは、processor
内で実行されるコードです非同期タスクが完了すると、callback
を実行することができます。つまり、dataArray内の各オブジェクトは、並列ではなく次々に処理されます。
さて、RxJavaに私が呼び出すことによってdataArray以上の処理機能を呼び出すことができます。
String[] dataArray = new String[] {"file1", "file2", "file3"};
Observable.fromArray(dataArray).subscribe(new Consumer<String>() { // in RxJava 1 it's Action1
@Override
public void accept(@NonNull String filePath) throws Exception {
//perform operation on filePath
}
});
をしかし、私はfilePath
上の非同期操作を実行する場合、私はdataArrayの項目について順次実行を確保することができますか?線に沿って何か私は何を探していると思います:
String[] dataArray = new String[] {"file1", "file2", "file3"};
Observable.fromArray(dataArray).subscribe(new Consumer<String>() {
// process next item in dataArray only after the callback is called
@Override
public void accept(@NonNull String filePath, CallNext callback) throws Exception {
// SomeDatabase will call callback once
// the asynchronous someAsyncOperation finishes
SomeDatabase.someAsyncOperation(filePath, callback);
}
});
さらに、どのように私はいくつかは、一度dataArray
のすべての項目が処理されたコードを呼び出すのですか?ソート済みのリスナー?
注:おそらく私はRXの概念が間違っていると思います。 RxJavaを使ってNode.jsの非同期パターンを実装する方法についてのガイドラインが見つからないので、私は尋ねています。また、私はAndroidを使用しており、ラムダ機能は使用していません。
concatMap()を見ましたか?このようなことを試してください Observable.from(fileNameList).concatMap((fileName) - > processFile(fileName).susbscribeOn(Schedulers.io()))。subscribe() – Buckstabue