我已经看过这里发布的示例:YDN-DB with multiple deferred,其中包含的一些代码非常接近我想要的内容,但不完全是。
我想知道在事务中嵌套延迟查询是否安全?例如:
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服务的异步调用是如何开始的。
发布于 2014-05-16 07:31:06
是的,你用对了。正如@Bergi所说,你可以直接返回run请求。
只要您的承诺是同步解析的或使用db承诺(总是异步的),就可以安全地嵌套延迟。
嵌套延迟通常是很好的,循环是需要担心的,例如用于意外大型循环的orders.forEach。浏览器对长事务不满意(是的,可能会导致神秘的错误或崩溃)。
比如使用count来检查记录是否存在。我认为它应该是ydn.db.KeyRange.only(workOrder.id),因为count需要一个键范围输入参数。
https://stackoverflow.com/questions/23684003
复制相似问题