我正在开发一个JavaScript框架 - Cubes Slicer OLAP server的前端。我现在要实现聚合浏览器对象,它将对服务器执行查询。建议的API示例:
我正在考虑处理结果的三个选项:
每次浏览器调用中A::
browser.aggregate(cell, options, handler)
任何查询的浏览器中的或 B::
browser.result_handler = my_result_handler
browser.aggregate(cell, options)
结果处理程序的位置如下:
result_handler = function(browser, result, context) { ... }
或 C:委托对象:
browser.delegate = my_controller
my_controller的方法与浏览器查询方法相对应。
还是有其他选项 D ?
我是JavaScript的新手(事实上,这是我用该语言编写的第一件事)。在JS框架中进行这种异步处理的最常用方法是什么?我更倾向于浏览器中的常用处理程序,选项 B 。
我正在创建的框架在这里:https://github.com/Stiivi/cubes.js(使用underscore.js和jQuery)
如果有人感兴趣,我有一个有效的例子,我不是把它放在这里,因为它不是很精致,只是沙盒/游乐场的东西。
我会非常感谢任何建设性的提示。
[编辑] 请注意,浏览器对象不是一次查询的一次性对象,它会在Web应用程序的报表的每个部分经常重复使用。顾名思义,它用于浏览数据。想要图表吗?使用浏览器进行聚合。想要一张桌子吗?使用浏览器。想要深入了解/获取更多细节?使用相同的浏览器。 “Cell”对象保存当前的浏览上下文,如果与单维文件系统相比,它就像多维“当前目录”。
[EDIR 2] 使用示例:您有一个带有条形图的页面,按年份汇总,以及带有按类别汇总的表格的饼图。饼图+表包含相同的数据。您需要两个请求两个上下文:bar
和pie
:
browser.aggregate(cell, { context: "bar" }, handler)
browser.aggregate(cell, { context: "pie" }, handler)
或当处理程序在浏览器中时:
browser.aggregate(cell, { context: "bar" })
browser.aggregate(cell, { context: "pie" })
浏览器中的处理程序会删除一些代码噪音。
答案 0 :(得分:1)
请注意,浏览器对象不是一次查询的一次性对象
我认为你已经回答了自己的问题。
aggregate
发出网络请求(确实如此,对吗?),你不知道可以花多长时间。如果您有一个请求回调,并且在上一个请求完成之前又发出了另一个请求,则永远不会调用前一个回调函数。
如果您问的是什么是常见模式,我会说肯定会通过回调。
例如,在客户端,jQuery用于网络。在服务器端(Node.js),有HTTP请求/服务器,它们传递回调,然后是Socket.IO或Websocket,都传递回调。然后有数据库,Mongo,Redis,它们都通过了回调。
答案 1 :(得分:0)
我建议调查JQuery,它会执行大量的异步事件处理,也可能会使您的代码受益。
更新:
通常,您只需传递一个回调函数,该函数在您的操作完成后调用。