ここに投稿された例を見てきました: 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 サービスへの非同期呼び出しがどのように先行するかを示しました。