r.expr() 的执行顺序是什么?
What is the r.expr() order of execution?
给定:
r.expr([
r.table('someTable1').get(id1).update({key : 'value1'}),
r.table('someTable2').get(id2).update({key : 'value2'})
])
.run(rethinkConnection, function(err, results) {});
作为 r.expr()
参数的数组中的项目是以可预测的顺序还是以任意顺序计算的?
r.expr([query1, query2])
按顺序发送查询,但是不能保证集群按顺序处理它们。这可能会导致竞争条件。将按顺序执行但使所有查询结果对最终处理回调可见的方法是:
var result1 = null;
var result2 = null;
r.table('table1')
.filter(function(row) {
// return a boolean
})
.run(rethinkConnection)
.then(function(localResult) {
result1 = localResult;
return r.table('table2')('someField').run(rethinkConnect);
})
.then(function(localResult) {
result2 = localResult;
// rest of processing here
})
.catch(function(error) {});
给定:
r.expr([
r.table('someTable1').get(id1).update({key : 'value1'}),
r.table('someTable2').get(id2).update({key : 'value2'})
])
.run(rethinkConnection, function(err, results) {});
作为 r.expr()
参数的数组中的项目是以可预测的顺序还是以任意顺序计算的?
r.expr([query1, query2])
按顺序发送查询,但是不能保证集群按顺序处理它们。这可能会导致竞争条件。将按顺序执行但使所有查询结果对最终处理回调可见的方法是:
var result1 = null;
var result2 = null;
r.table('table1')
.filter(function(row) {
// return a boolean
})
.run(rethinkConnection)
.then(function(localResult) {
result1 = localResult;
return r.table('table2')('someField').run(rethinkConnect);
})
.then(function(localResult) {
result2 = localResult;
// rest of processing here
})
.catch(function(error) {});