>假设我想问一些浏览器,比如这个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-success
和on-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