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) {});