Что является альтернативой - PullRequest
0 голосов
/ 29 февраля 2020
Блок

a go возвращает канал, а не возвращаемое значение, так как можно извлечь возвращаемое значение в блоке go, когда cl js не имеет <!!?

Например, учитывая следующий код:

(go (let [response (<! (http/get "https://api.github.com/users"
                                 {:with-credentials? false
                                  :query-params {"since" 135}}))]
      (:status response)))

вернет канал, но не (:status response). Как заставить этот go блок вернуть (:status response)?

1 Ответ

0 голосов
/ 06 марта 2020

<!! не существует в javascript, потому что среда выполнения не поддерживает его. Javascript является однопоточным, а <!! является операцией блокировки. Блокировка основного потока в среде на основе браузера - плохая идея, поскольку она просто замораживает все действия javascript (и потенциально может заморозить всю страницу) до тех пор, пока не будет разблокирована.

Вместо этого рассмотрите возможность использования clojure. core.async / take! примерно так:

(take! channel (fn [value] (do-something-with value)))
...