如何处理api的javascript/clojurescript包装库?

如何处理api的javascript/clojurescript包装库?,javascript,ajax,clojurescript,Javascript,Ajax,Clojurescript,我主要是一名Python开发人员,但最近我一直在努力学习Clojure/ClojureScript。作为实践,我想为Reddit的API编写一个ClojureScript包装器 我的大部分困惑是由于Javascript的异步特性。由于AJAX函数实际上不会从API返回响应,因此如何编写包装器,使其工作方式与同步服务器端请求类似 或者这根本不可能,并且我必须为我的应用程序中的每个API调用使用回调(因此包装器库将毫无意义) 有没有类似的图书馆我可以参考?(Javascript/ClojureScr

我主要是一名Python开发人员,但最近我一直在努力学习Clojure/ClojureScript。作为实践,我想为Reddit的API编写一个ClojureScript包装器

我的大部分困惑是由于Javascript的异步特性。由于AJAX函数实际上不会从API返回响应,因此如何编写包装器,使其工作方式与同步服务器端请求类似

或者这根本不可能,并且我必须为我的应用程序中的每个API调用使用回调(因此包装器库将毫无意义)


有没有类似的图书馆我可以参考?(Javascript/ClojureScript)

可以发出同步的XHR请求,但它不是惯用的。Javascript(扩展名为Clojurescript)使用单线程执行模型,因此长时间运行的调用通常是异步的,以避免阻塞应用程序其他部分的执行。如果您正在为同步API编写包装器,通常会向每个API方法添加一个回调参数(不要忘记提供某种形式的错误处理)


关于您的具体问题,从浏览器访问RedditAPI几乎肯定会违反:您通常只能向提供原始Javascript的域发出AJAX请求。通常,当您希望提供对第三方服务的客户端(基于浏览器)访问时,可以通过服务器代理客户端请求来实现。服务器应确保仅代理来自授权客户端的请求。如果您决定采用此路径,您将使用clojurescript从浏览器向Web服务器(可能运行clojure)发出异步请求,该请求将对请求进行身份验证,然后向reddit API发出同步请求,并将结果返回给客户端。当响应准备就绪时,客户端将调用回调,您的代码将收到结果。

大多数编程语言都知道您要寻找的概念是“未来”。JavaScript库通常将未来称为“承诺”

在Python中有几个实现未来的库。最著名的是,然而,是一个新兴的图书馆,将

同样的情况在JavaScript中也是如此。()提供一个未来的实现,让您能够:

function makeTwoAsyncCalls(errorCallback, successCallback) {
    ajaxRequest(errorCallback, function onSuccess(data) {
       processWithWebWorker(errorCallback, successCallback);
    });
}
为此:

function doWorkAsync(errorCallback, successCallback) {
    return ajaxRequest()
        .then(processWithWebWorker)
        .then(successCallback)
        .fail(errorCallback);
}

您也可以选择同步进行AJAX调用,可以吗?谢谢。关于第二段,如果reddit的API超出限制,它最终会阻塞我的服务器吗?reddit客户端如何处理这个问题?(例如,iOS版的Alien Blue)或者他们没有这个问题,因为他们不是基于浏览器的。是的,如果您超过他们的阈值,reddit的API可能会阻止您的服务器。如果你最终写了一个受欢迎的服务,你可以联系他们,让他们增加你的服务限制。应用程序不受这些限制,因为它们不在浏览器沙箱中运行。Clojure(脚本)提供了一种语言功能,但它们并不是XHR请求真正需要的,因为它们将在将来可用之前阻止。