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

最近在使用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到这个数组里面,但是结果却不是我想的那样。不知道大家有没有好的解决方法,赶快来分享一下。

阅读 3.9k
评论
    1 个回答

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

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

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

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

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

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

      撰写回答

      登录后参与交流、获取后续更新提醒

      相似问题
      推荐文章