关于LeanCloud,如何在查询语句的外部获取查询的结果?

dreamapplehappy
  • 6.4k

最近在使用LeanCloud的时候发现有一个小问题不知道怎样解决,问题描述如下:

var userResults = [];
query.find({
  success: function(results) {
    // Do something with the returned AV.Object values
    for (var i = 0; i < results.length; i++) {
      var object = results[i];
      userResults.push(object);
      alert(object.id + ' - ' + object.get('playerName'));
    }
  },
  error: function(error) {
    alert("Error: " + error.code + " " + error.message);
  }
});
console.log(userResults);//控制台的输出结果为空,外部无法用这个方法获取到查询的结果

我想在查询语句的外部使用results结果,然后就设置了一个userResults数组作为全局变量,然后将查询到的每一个结果push到这个数组里面,但是结果却不是我想的那样。不知道大家有没有好的解决方法,赶快来分享一下。

回复
阅读 4k
1 个回答

因为查询结果是异步调用,所以写在外面获取 results 结果是不正确的。

推荐的方式是使用Promise。LeanCloud 的每个异步函数调用都会返回 Promise。

参见文档:https://leancloud.cn/docs/js_guide.html#Promise

所以,在你这里,合适的写法是:

query.find().then(function(results){
    console.log(results);
}, function(error){
    // 处理错误
})

虽然你可能感觉和你上面的代码差别不大,但针对多级回调嵌套,使用 Promise 的优势就凸显出来了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏