按照典型的 REST 标准,我将资源分解为单独的端点和调用。这里讨论的主要两个对象是List
和Item
(当然,一个列表有一个项目列表,以及与之关联的一些其他数据)。
因此,如果用户想要检索他的列表,他可能会发出 Get 请求api/Lists
然后,用户可能想要获取其中一个列表中的项目,并从上一次调用中检索到的位置获取api/ListItems/4
4 。List.listId
这一切都很好: 的options.complete
属性$.ajax
让我指向一个回调方法,因此我可以简化这两个事件。
但是,如果我想获取所有相关列表的元素,事情就会变得非常混乱。例如,假设我有一个名为的库函数makeGetRequest
,它接收端点和回调函数,以使这段代码更清晰。简单地以天真的方式检索 3 个元素会导致:
var success1 = function(elements){
var success2 = function(elements){
makeGetRequest("api/ListItems/3", finalSuccess);
}
makeGetRequest("api/ListItems/2", success2);
}
makeGetRequest("api/ListItems/1", success1);
恶心!这就是编程 101 中的那种东西,我们在手腕上拍了一下并指向循环。但是你怎么能用循环来做到这一点,而不必依赖外部存储呢?
for(var i : values){
makeGetRequest("api/ListItems/" + i, successFunction);
}
function successFunction(items){
//I am called i-many times, each time only having ONE list's worth of items!
}
即使有了存储,我也必须知道所有人何时完成并检索了他们的数据,并调用一些主函数来检索所有收集的数据并对其进行处理。
有处理这个的做法吗?这个问题应该已经解决过很多次了...