Nano Hash - криптовалюты, майнинг, программирование

Ждать последних значений из зависимых потоков в BaconJS?

У меня 3 потока. gradingResult и contextId зависят от studentResponse. Мне нужно запустить событие и только одно событие (в противном случае это тривиально), когда все 3 имеют последние значения.

Я пробовал #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/

ОБНОВЛЕНИЕ: это надуманный пример. В реальном коде gradingResult — это запрос ajax. И gradingResult, и contextId зависят от времени от studentResponse.


  • Зачем вам нужно передавать значения studetResponse в gradingResult и contextId? Кроме того, Bacon.Bus предоставляет метод plug для подключения потока к шине: github. com/baconjs/bacon.js/#bus-plug 02.09.2015
  • Это надуманный пример. В реальном коде gradingResult — это запрос ajax. Да, я знаю о #plug. 02.09.2015
  • Попробуйте не использовать push внутри onvalue, я думаю, это то, что портит атомарность. Скорее используйте что-то вроде map(). Также было бы полезно, если бы вы могли показать нам соответствующий отрывок из вашего реального кода. 02.09.2015

Ответы:


1

Решение состоит в том, чтобы сэмплировать поток, который обновляется последним. В данном случае это 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(contextId) //Sampling by stream that updates last <---
.onValue(function(t) {
  console.log(t);
});

studentResponse.push(1);
studentResponse.push(2);
studentResponse.push(3);
02.09.2015

2

Похоже, что подключение Buses вместо того, чтобы помещать значение внутрь studentResponse.onValue, делает свое дело:

var studentResponse = new Bacon.Bus();
var gradingResult = new Bacon.Bus();
var contextId = new Bacon.Bus();

gradingResult.plug(studentResponse);
contextId.plug(studentResponse);

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);
02.09.2015
  • Если это было неясно, этот пример надуман. Вы удалили временную зависимость, которую я не могу сделать в реальном коде. 02.09.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..