在YDN-DB事务中嵌套延迟
Nested deferred in a YDN-DB transaction
我看过这里张贴的例子:YDN-DB与多个延迟,其中包含一些代码非常接近我想要的,但不完全。
我想知道在事务中嵌套延迟查询是否安全?例如:
loadWorkOrders: function() {
var params = {
userId: 1,
status: Status.Allocated
};
var allOrders = null;
return workOrderHttpService.getWorkOrders(params).then(function(orders) {
allOrders = orders.data;
return ydndatabase.open();
}).then(function(db){
return db.run(function(runDb){
allOrders.forEach(function(workOrder){
runDb.count(Store.WorkOrder, ydn.db.KeyRange.only(workOrder.id)).then(function(count) {
if(count == 0) {
return runDb.put(Store.WorkOrder, workOrder);
} else {
return workOrder;
}
});
});
}, [Store.WorkOrder], TransactionType.ReadWrite)
});
}
编辑:我已经编辑了代码,以显示它是如何由一个异步调用http服务
是的,你用对了。正如@Bergi所说,你可以直接返回run
请求。
只要你的承诺是同步或使用db承诺(总是异步)解决的,那么嵌套延迟是安全的。
嵌套延迟通常是好的,循环是要担心的,如orders.forEach
意外的大循环。浏览器不喜欢长事务(是的,可能会导致神秘的错误或崩溃)。
就像使用count来检查记录是否存在一样。我认为应该是ydn.db.KeyRange.only(workOrder.id)
,因为count
需要一个键范围输入参数。
相关文章:
- 用嵌套函数和默认函数定义函数
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 可以简化嵌套的延迟Q Promises解析吗
- 用于搜索的聚合物嵌套绑定
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- d3中堆栈函数和嵌套函数之间的差异
- 如何打印嵌套对象的所有值
- JavaScript 中的嵌套函数和 “this” 关键字
- 设置嵌套对象属性的更好方法
- jQuery通过嵌套的ajax调用延迟对象
- Javascript for 循环中的嵌套延迟
- 嵌套的 AJAX 调用列表和 $.when.apply - 延迟承诺无法正常工作
- 在 node.js 中返回延迟嵌套承诺
- 为什么延迟的“then”回调在嵌套的 AJAX 的成功回调之前触发
- 从延迟嵌套函数返回值
- 如何在最里面的循环等待响应时延迟嵌套迭代
- 如何延迟迭代嵌套对象
- 使用延迟交换嵌套循环中的数组元素
- 如何处理嵌套的jquery延迟调用
- 在YDN-DB事务中嵌套延迟