Описание тега core.async

A clojure/clojurescript library for asynchronous programming.
1 ответ

Clojurescript - Uncaught Error: <! используется не в (Go...) блок

Я в Clojurescript и пытаюсь использовать core.async чтобы получить результат от встроенной функции Javascript (я в браузере) и условно интегрировать ее в карту. У меня есть функция для переноса нативного вызова браузера (вдохновленный выступлением Т…
16 авг '15 в 17:09
1 ответ

ClojureScript, Om и Core.async: как правильно обрабатывать события

Я взглянул на использование Om для дизайна клиентского сайта. Это также мой первый раз, когда я использую core.async. Читая учебник https://github.com/swannodette/om/wiki/Basic-Tutorial Я видел использование канала core.async для обработки операции …
28 май '14 в 06:45
1 ответ

Предотвратить завершение программы, пока блоки go выполняются бесконечно?

Я написал отдельный uberjar с методом main, который раскручивает два блока go следующим образом: (defn -main [&amp; args] (let [c (chan)] (go (while true (&gt;! c (rand)))) (go (while true (&lt;! c))))) Но когда я запускаю программу, она быстро заве…
11 янв '14 в 21:11
1 ответ

Попытка создать асинхронный пример с использованием Core.Async.Pipe, но, как представляется, Pipe.write блокирует ожидание Pipe.read

Я создал следующий игрушечный пример, который считает в цикле и записывает значение в Async.Pipe: open Sys open Unix open Async.Std let (r,w) = Pipe.create () let rec readloop r = Pipe.read r &gt;&gt;= function | `Eof -&gt; return () | `Ok v -&gt; r…
07 июл '14 в 18:39
1 ответ

Неспособность закрыть канал вызывает бессрочную блокировку

Вот пример с http://www.braveclojure.com/core-async/: (defn hotdog-machine-v2 [hotdog-count] (let [in (chan) out (chan)] (go (loop [hc hotdog-count] (if (&gt; hc 0) (let [input (&lt;! in)] (if (= 3 input) (do (&gt;! out "hotdog") (recur (dec hc)) ) …
20 май '15 в 20:21
2 ответа

Самый простой способ использовать обратный вызов A / O в экземплярах http-kit/get

Я запускаю несколько сотен одновременно http-kit.client/get запросы снабжены обратным вызовом для записи результатов в один файл. Что было бы хорошим способом борьбы с безопасностью потоков? С помощью chanа также &lt;!! от core.asyc? Вот код, которы…
21 фев '17 в 13:13
2 ответа

Очищение карты его каналов

Предположим, у нас есть карта m со следующей структурой: {:a (go "a") :b "b" :c "c" :d (go "d")} Как показано, m имеет четыре ключа, два из которых содержат каналы. Вопрос: Как можно написать общую функцию (или макрос?) cleanse-map которая берет кар…
10 мар '16 в 04:38
2 ответа

Как четко структурировать зависимости между каналами core.async?

Допустим, у меня есть набор вычислений, которые я хочу выполнять асинхронно с использованием core.async, но, к сожалению, некоторые функции зависят от вывода других функций. Как я могу четко структурировать это в своем коде, и в то же время получить…
11 ноя '15 в 21:18
1 ответ

Clojure: экспресс неудачных вычислений в качестве значения для core.async

Обычно функции, которые могут потерпеть неудачу, возвращаются nil: some-&gt; макрос предназначен для цепочки вычислений, подобных этому (выглядит как слово "М"). Вопрос в том, как использовать этот подход с core.async, например, для тяжелых async/th…
13 апр '18 в 17:42
2 ответа

Clojure, как создать вектор из элементов, поступающих в агрегатор core.async

Я следовал здесь и получаю вещи, называемые сегментами, поступающими в агрегатор. Все эти сегменты прибывают, и я могу распечатать их по мере их поступления. Но я хочу сделать из них неизменную структуру данных (вектор) по мере их поступления. Или д…
21 сен '15 в 00:19
5 ответов

Сравнение core.async и функционально-реактивного программирования (+Rx)

Я, кажется, немного запутался, сравнивая core.async Clojure с так называемыми Reactive Extensions (Rx) и FRP в целом. Похоже, что они решают аналогичную проблему асинхронности, поэтому мне интересно, каковы основные различия и в каких случаях одно п…
2 ответа

Как выполнить модульное тестирование функций побочных эффектов в Clojure?

Этот вопрос не о конкретных библиотеках (хотя некоторые из них будут использованы в конце), а о том, как структурировать код приложения, чтобы сделать возможным модульное тестирование функций побочных эффектов. Если мы должны сделать это вообще? Оче…
1 ответ

Тестирование с core.async - сбросить блоки внутри теста?

Я пытаюсь написать такой тест: (deftest login-form-rendering (async done (with-redefs [http/post fake-login-success] (with-mounted-component (c/login-form login!) (fn [c div] (.click (.getElementById js/document "Login")) (is (= (:page @app-state) :…
05 дек '15 в 18:31
1 ответ

Используя alt! вместо альтов! в Clojure

У меня есть код, который пытается отправить сообщение по каналу или тайм-аут после 150 мс: (let [[ret _] (alts!! [[work-chan parsed-body] (timeout 150)])] (cond ret :ok :else :error)) Мне было интересно, что такое Clojure идиоматический способ отпра…
17 фев '15 в 05:32
2 ответа

Нужно ли помещать `while true` внутри потока clojure core.async?

У меня есть шаблон производителя / потребителя, который я делал с core.async thread функции так: (defn -db-producer-factory [order-ids-chan next-chan] (thread (while true (do (let [order-id (&lt;!! order-ids-chan)] (condp = order-id :finished (do (&…
03 май '16 в 17:25
1 ответ

Как запомнить функцию, которая использует core.async и блокирует чтение канала?

Я хотел бы использовать memoize для функции, которая использует core.async а также &lt;!! например (defn foo [x] (go (&lt;!! (timeout 2000)) (* 2 x))) (В реальной жизни это может быть полезно для кеширования результатов вызовов сервера) Я смог добит…
16 июл '14 в 13:17
2 ответа

Clojurescript ajax.core без отдельного обработчика / обратного вызова, с очень точным потоком в коде, как если бы код был синхронизирован

В JavaScript я мог бы написать такой код, как: var app_state={"context":"loading"}; $.get("") .then(function(data){ app_state["data"]=data; }) .then(change("context", "edit")) .then(render) В Clojurescript я бы хотел что-то вроде: (-&gt; @app-state …
08 дек '15 в 14:46
1 ответ

Должны ли закрываться каналы core.async, когда они больше не используются?

Метод close (по крайней мере, в мире Java) - это то, что вы, как добропорядочный гражданин, должны вызывать, когда вы закончите, используя связанный ресурс. Каким-то образом я автоматически начал применять то же самое для закрытия! функция из библио…
05 мар '15 в 21:43
1 ответ

Сообщения публикуются перед подпиской в ​​core.async

В следующем примере я вижу, что опубликованные сообщения поступают на подписанный канал, хотя они публикуются до подписки. (let [in (async/chan) out (async/chan) pub (async/pub in :key)] (async/go (&gt;! in {:id 1 :key :k1}) (&gt;! in {:id 2 :key :k…
23 май '14 в 15:47
1 ответ

Машина core.async, которая зацикливается, пока fx не вернет true

При загрузке веб-сайта мне часто приходится загружать код ПОСЛЕ того, как произошло другое структурное событие DOM. Поэтому я часто сталкиваюсь с большим количеством функций, которые сначала проверяют, существует ли какой-либо элемент в DOM, а затем…
02 янв '15 в 02:27