0

我查看了此处发布的示例: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 服务进行异步调用的

4

1 回答 1

1

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

只要你的 promise 是同步解决的或使用 db promises(总是异步的),嵌套 deferred 是安全的。

嵌套延迟一般没问题,循环是要担心的,比如orders.forEach意外的大循环。浏览器对长事务不满意(是的,可能导致神秘错误或崩溃)。

就像使用 count 来检查记录存在的方式一样。我认为应该是ydn.db.KeyRange.only(workOrder.id),因为count需要一个键范围输入参数。

于 2014-05-15T23:31:05.993 回答