Я не уверен, что потоки Бэкона - это правильная вещь для этого, но вот как вы могли это сделать.
function makeRandomNumber() {
return Math.random();
}
function makeRandomStream() {
return Bacon.fromBinder(function(sink) {
while(sink(makeRandomNumber()) === Bacon.more) {}
return function() {};
});
}
// example of using the random stream
makeRandomStream().filter(function(x) {
return x > 0.5;
}).take(5).onValue(function(x) {
console.log('random number', x);
});
Обратите внимание, что makeRandomStream() возвращает новый поток Bacon каждый раз. Вы, скорее всего, не хотите прикреплять несколько подписчиков к одному и тому же потоку случайных чисел, иначе вы будете повторно использовать одни и те же случайные числа в нескольких местах. Также убедитесь, что вы всегда отменяете подписку на случайный числовой поток синхронно; не пытайтесь сначала объединить его с другим потоком, иначе поток случайных чисел заблокирует работу остального кода, поскольку он генерирует неограниченные случайные числа.
И вы должны использовать window.crypto.getRandomValues
вместо Math.random
для криптографических целей.
Что делать, если я попытаюсь объединить поток, полученный путем сопоставления этого потока с другими потоками? – gyzerok
gyzerok: если у вас есть конкретный пример, возможно, jsFiddle, было бы легче помочь. Мне трудно найти конкретный прецедент для этого потока. – OlliM
https://github.com/gyzerok/reactive-cryptochat/blob/master/rsa.js Там я использую этот поток для генерации значений e, d и m для моего приложения чата rsa. Спасибо, что помогли мне. – gyzerok