У меня 3 потока. gradingResult
и contextId
зависят от studentResponse
. Мне нужно запустить событие и только одно событие (в противном случае это тривиально), когда все 3 имеют последние значения.Ждать последних значений из зависимых потоков в BaconJS?
Я пробовал #combineTemplate и #sampledBy studentResponse
. К сожалению, я всегда вижу неправильные данные --- gradingResult
и contextId
имеют старые значения в комбинированном шаблоне. Как я могу ждать, пока все потоки будут иметь последние значения?
код показан ниже:
var studentResponse = new Bacon.Bus();
var gradingResult = new Bacon.Bus();
var contextId = new Bacon.Bus();
studentResponse.onValue(function(f) {
gradingResult.push(f);
contextId.push(f);
});
Bacon.combineTemplate({
studentResponse: studentResponse,
gradingResult: gradingResult,
contextId: contextId
}).sampledBy(studentResponse)
.onValue(function(t) {
console.log(t);
});
studentResponse.push(1);
studentResponse.push(2);
studentResponse.push(3);
Ссылка на jsfiddle: https://jsfiddle.net/3o4c9sm8/1/
UPDATE: это надуманный пример. В реальном коде gradingResult является ajax-запросом. Оба gradingResult и ContextID имеют временные зависимости от studentResponse
Зачем вам нужно подталкивать значения studetResponse к gradingResult и contextId? Кроме того, Bacon.Bus предоставляет метод подключения для подключения потока к шине: https://github.com/baconjs/bacon.js/#bus-plug – JJuutila
Это надуманный пример. В реальном коде gradingResult является ajax-запросом. Да, я знаю #plug. –
Не пытайтесь использовать 'push' внутри' onvalue', я думаю, это то, что испортило атомарность. Скорее используйте что-то вроде 'map()'. Это также может быть полезно, если вы можете показать нам соответствующую выдержку из вашего реального кода. – Bergi