rethinkDB .then 查询结果

rethinkDB .then on query result

我将 nodeJS 与本机 rethinkDB 驱动程序一起使用,并且有一个基本的 select 3 列查询,如下所示:

var runQuery = function() {
var items = [];
r.connect({host: 'someHost',
port:28015,
db:'test'})
.then(function(c){
r.table('ebb1')
   .pluck("col1","col2","col3")
   .run(c, function(err,cursor){

       cursor.each(function(err,result){
           if(err) throw err;
           items.push(result);
           })
        })
    }).then(console.log(items))
}

我尝试按照 rethink 文档的建议使用 cursor.toArray(),但是当我尝试 return 时我得到了一个 null,我认为结果太大了。当我在 cursor.each() 函数中 console.log(result) 时,我确实看到了我期望的结果,所以我相信它们被推到了 items 数组中,但我不确定如何正确引用列表在它完全填充结果数据之后。

如有任何帮助或指导,我们将不胜感激!

您正在混合回调样式和承诺,这让事情变得更难,因为您必须 return 在回调中承诺。在您的代码中,promise fullfillment 在回调完成之前触发并记录结果。

所以还是信守诺言比较好。甚至 toArray 也可以 return 承诺。

var runQuery = function() {
  r.connect({
    host: 'someHost',
    port:28015,
    db:'test'
  })
  .then(function(c){
    return r.table('ebb1')
             .pluck("col1","col2","col3")
             .run(c)
  })
  .then(function(re) {
    return re.toArray()
  })
  .then(function(data) {
    //data is the array of your query result
    console.log(data)
  })
}