Использование каналов ClojureScript core.async из Javascript - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь использовать библиотеку cljs из проекта Node.js, Electron.

Функция, которую я вызываю в библиотеке cljs, возвращает объект канала core.async. Это выглядит так, когда я console.log:

{
  takes: { head: 0, tail: 0, length: 0, arr: [ <32 empty items> ] },
  dirty_takes: 0,
  puts: { head: 0, tail: 0, length: 0, arr: [ <32 empty items> ] },
  dirty_puts: 0,
  buf: {
    buf: { head: 0, tail: 0, length: 0, arr: [Array] },
    n: 1,
    'cljs$lang$protocol_mask$partition0$': 2,
    'cljs$lang$protocol_mask$partition1$': 0
  },
  closed: false,
  add_BANG_: [Function: G__11914] {
    'cljs$core$IFn$_invoke$arity$1': [Function: G__11914__1],
    'cljs$core$IFn$_invoke$arity$2': [Function: G__11914__2]
  }
}

Как я могу взаимодействовать с ним из Javascript? Как сделать что-то вроде (take! channel callback) в js?

1 Ответ

0 голосов
/ 27 октября 2019

Вы можете сделать это, если у вас есть доступ к пространству имен cljs.core.async из JS.

;; CLJS
(take! channel callback)
;; JS
cljs.core.async.take_BANG_(channel, function(val) { console.log(val); });
...