最近在使用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到这个数组里面,但是结果却不是我想的那样。不知道大家有没有好的解决方法,赶快来分享一下。
因为查询结果是异步调用,所以写在外面获取 results 结果是不正确的。
推荐的方式是使用Promise。LeanCloud 的每个异步函数调用都会返回 Promise。
参见文档:https://leancloud.cn/docs/js_guide.html#Promise
所以,在你这里,合适的写法是:
虽然你可能感觉和你上面的代码差别不大,但针对多级回调嵌套,使用 Promise 的优势就凸显出来了。