数据请求有时是异步的
Data request is sometimes asynchronous
这是我今天早些时候发布的一个问题的后续内容。我正在阅读这本关于在Firebase中使用AngularJS的书,这本书让我提出了这个问题。我找到了一个解决方案,但我仍然不明白的是,API文档中的$firebaseArray
示例似乎没有将其作为异步请求进行处理。
var list = $firebaseArray(new Firebase(URL));
// add an item
list.$add({ foo: "bar" }).then(...);
// remove an item
list.$remove(2).then(...);
// make the list available in the DOM
$scope.list = list;
此外,书中的示例似乎也同步处理了请求。
# Service
var buildingsUri = FIREBASE_URI + '/buildings';
var ref = new Firebase(buildingsUri);
var buildings = $firebaseArray(ref);
var getBuildings = function () {
return buildings;
};
...
# Controller
$scope.buildings = syncArraySvc.getBuildings();
当第一个例子中的$scope.list
和第二个例子中$scope.buildings
没有检查以确保请求已经完成时,它们是如何用数据正确填充的?
$add和$remove方法返回promise。$firebaseArray()方法返回一个添加了一些特殊函数和属性的数组。$add和$remove都不需要本地加载数据,也不需要依赖于数据的状态,因此可以同步调用它们。当然,数据仍然是异步下载的。例如:
var list = $firebaseArray(new Firebase(URL));
// add an item
list.$add({ foo: "bar" }).then(function(ref) {
console.log('added', ref.key());
});
// remove an item
list.$remove(2).then(function(ref) {
console.log('removed', ref.key());
});
console.log('list current contains', list.length, 'items');
list.$loaded(function() {
console.log('after loading initial data, the list contains', list.length, 'items');
});
假设列表在加载时包含10个项目,并且在代码执行期间该列表没有远程更改,我们将看到类似于以下的输出:
list currently contains 0 items
after loading initial state, the list contains 10 items
added abc123
removed xyz456
此外,我要注意的是,这段代码可能是多余的。通常,当我们看到这样的代码时,这是因为开发人员试图将Firebase转变为CRUD模型。您可能只需要在那里返回$firebaseArray(),并使用现有的方法,如$getRecord()等,而不是在服务中人为地包装API。
相关文章:
- 如果需要登录,Angularjs$http拦截器会暂停异步请求
- RxJS异步请求更新
- Node js中间件,用于向mongo发出异步请求
- AJAX-如何在不冻结浏览器的情况下逐个发出异步请求
- 如何等待异步请求完成
- 为什么Chrome似乎异步请求Javascript文件
- 使用异步请求多个网址
- 在HTML中,可以在没有Ajax和/或Javascript的情况下创建异步请求
- 节点 JS 使用异步请求同步工作流
- 如何处理客户端节点上的异步请求
- 具有异步请求的 NodeJS
- 使用请求-承诺的嵌套异步请求
- 将数据从异步请求添加到 WebSQL 数据库时出错
- 使用 Jasmine 测试触发异步请求的方法
- 状态 = 0 的异步请求
- 在 Node.js 服务器内发出异步请求错误:“类型错误:对象 #<对象> 没有方法'_implicitHeader'”
- 如何使用 jquery ajax 向 PHP 页面发送异步请求
- 承诺解析错过异步请求循环的一个值
- 用于处理成功、失败、重试的异步请求的设计模式?(JavaScript)
- 如何处理对循环中发出的多个异步请求(AJAX 调用)的响应