首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >YDN-DB事务中的嵌套延迟

YDN-DB事务中的嵌套延迟
EN

Stack Overflow用户
提问于 2014-05-16 00:34:39
回答 1查看 179关注 0票数 0

我已经看过这里发布的示例:YDN-DB with multiple deferred,其中包含的一些代码非常接近我想要的内容,但不完全是。

我想知道在事务中嵌套延迟查询是否安全?例如:

代码语言:javascript
复制
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服务的异步调用是如何开始的。

EN

回答 1

Stack Overflow用户

发布于 2014-05-16 07:31:06

是的,你用对了。正如@Bergi所说,你可以直接返回run请求。

只要您的承诺是同步解析的或使用db承诺(总是异步的),就可以安全地嵌套延迟。

嵌套延迟通常是很好的,循环是需要担心的,例如用于意外大型循环的orders.forEach。浏览器对长事务不满意(是的,可能会导致神秘的错误或崩溃)。

比如使用count来检查记录是否存在。我认为它应该是ydn.db.KeyRange.only(workOrder.id),因为count需要一个键范围输入参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23684003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档