如何处理 clojurescript 中的标准 .then 样式回调?



>假设我想问一些浏览器,比如这个JS示例:

if (navigator.requestMIDIAccess) {
console.log('WebMIDI is supported in this browser.');
navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure);

我将如何在 ClojureScript 中做到这一点?我看到了一些 AJAX 样式 Web 请求的示例,以及一些非常复杂的场景等等,但最简单的路由是什么?

if (navigator.requestMIDIAccess) {
console.log('WebMIDI is supported in this browser.');
navigator.requestMIDIAccess().then(onMIDISuccess, onMIDIFailure);
}

也简单地翻译:

(when (.-requestMIDIAccess navigator)
(.log js/console "WebMIDI is supported in this browser.")
(.then (.requestMIDIAccess navigator) on-midi-success on-midi-failure))

其中on-midi-successon-midi-failure是在处理承诺被履行或拒绝之前定义的某个函数。

所以基本上.then样式回调在 ClojureScript 中的处理方式与在 JavaScript 中的处理方式完全相同。

你有各种选择:then只是一个函数,所以你可以只使用(.then ..(。 如果then是 Promise 对象,则 promesa https://cljdoc.org/d/funcool/promesa/5.1.0/doc/user-guide 有一个不错的互操作故事。

在 promise 周围添加一些宏语法糖也非常简单,就像我在这里所做的那样: https://gist.github.com/beders/06eeb1d8f49de715c6bd2b84f634cff6

最新更新