Я спросил «Как сопоставить поток с ленивым потоком обещаний» с лимитом параллелизма 1 здесь: map a stream to lazy promise stream. Ответ был flatMapConcat
.flatMapConcat с вложенными потоками
Теперь у меня есть два вложенных потока, для которых требуется ограничение параллелизма 1, а flatMapConcat
больше не работает.
var getPromise = function(value) {
console.log('resolving ' + value);
return new RSVP.Promise(function(resolve, reject) {
setTimeout(function() {
resolve(value);
}, 1000);
});
};
var stream = Bacon.fromArray([1,2,3]).flatMapConcat(function(value) {
return Bacon.fromPromise(getPromise(value));
});
//stream.log();
// nice sequential
// resolving 1
// 1
// resolving 2
// 2
// resolving 3
// 3
var secondStream = stream.flatMapConcat(function(promised) {
return Bacon.fromPromise(getPromise('second' + promised));
});
secondStream.log();
// mixed up stream and secondStream, not sequential anymore
// resolving 1
// resolving second1
// resolving 2
// second1
// resolving second2
// resolving 3
// second2
// resolving second3
// second3
// Required output:
// resolving 1
// resolving second1
// second1
// resolving 2
// resolving second2
// second2
// resolving 3
// resolving second3
// second3
Первый stream
не хороший и последовательный, но когда я построить вложенный поток с ним, flatMapConcat
больше не работает. Мне нужен первый поток, ожидающий второй поток.