Parse-Javascript嵌套调用
我正在使用Parse编写javascript代码。我有用户类和订阅类。所有用户的订阅信息都存储在subscription类中,因此它就像一对多关系 我想检索用户信息和每个用户的订阅计数,并将其存储在对象数组中 我的尝试如下:Parse-Javascript嵌套调用,javascript,parse-platform,Javascript,Parse Platform,我正在使用Parse编写javascript代码。我有用户类和订阅类。所有用户的订阅信息都存储在subscription类中,因此它就像一对多关系 我想检索用户信息和每个用户的订阅计数,并将其存储在对象数组中 我的尝试如下: var user = Parse.User; var query = new Parse.Query(user); query.find().then(function(objects) { return objects; }
var user = Parse.User;
var query = new Parse.Query(user);
query.find().then(function(objects) {
return objects;
}).then(function (objects) {
for(var i = 0; i < objects.length; i++) {
var object = objects[i];
var subscription = Parse.Object.extend('Subscription');
var queryForSubscription = new Parse.Query(subscription);
queryForSubscription.equalTo('subscriptionUser', object);
queryForSubscription.count().then(function(subscriptions) {
var userEmail = object.get('email');
var userDOB = object.get('userDOB');
var userJoinedAt = object.createdAt;
var userGender = object.get('userGender') ? 'Male' : 'Female';
var subscriptionCount = subscriptions;
var sub = [
userEmail,
userDOB,
userGender,
userJoinedAt,
subscriptionCount
];
userArray.push(sub);
});
}
});
然而,结果是
[{User A's email, User A's dob, User A's Gender, User A's Joined Date, 2},
{User A's email, User A's dob, User A's Gender, User A's Joined Date, 0}]
我现在陷入困境。一直试图使用承诺等,但不知道..请帮助
更新
一定要这么爱!!!非常感谢你们每一个人!!
这里还有一个问题。实际上,我还有一个叫做favorite的类来计算每个用户的收藏夹数量
如果用户A的收藏夹数量为5,用户B的收藏夹数量为3,那么最终的预期结果如下所示:
[{User A's email, User A's dob, User A's Gender, User A's Joined Date, 2, 5},
{User B's email, User B's dob, User B's Gender, User B's Joined Date, 0, 3}]
我不太确定我把最喜欢的课程的新查询放在哪里…再次需要你的建议 在执行最后一个函数时,似乎需要保存
object
的值。试试这个:
for(var i = 0; i < objects.length; i++) {
var object = objects[i];
queryForSubscription.count().then(
(function(myObject){
return function(subscriptions) {
var userEmail = myObject.get('email');
...
};
})(object)
);
}
for(var i=0;i
你可以选择
另一种绕过此错误的黑客方法是使用.forEach()
:
循环的每次迭代都会分配一个新的对象
变量,您应该避免“sharedvar
”错误
指出错误 一个常见的javascript陷阱是:局部变量的作用域不是它最接近的区域,而是它最接近的函数 以下代码段:
function (objects) {
for(var i = 0; i < objects.length; i++) {
var object = objects[i];
...
函数(对象){
对于(var i=0;i
实际上相当于:
function (objects) {
var i, object;
for(i = 0; i < objects.length; i++) {
object = objects[i];
...
函数(对象){
变量i,对象;
对于(i=0;i
因此,OP代码中的
对象
变量实际上由所有创建的queryForSubscription
变量共享,并且当任何时,(…)
回调被执行(循环完成后,正如OP正确指出的那样),此对象
变量保存数组中最后一项的值。将您的解析代码放入问题中可能是个好主意。这样人们可以看到您的解析代码并帮助您完成它。谢谢Jay!这是我第一次问stackoverflow问题:)我刚刚编辑了我的帖子!您有什么问题吗?您应该ead关于javascript闭包,在上一个函数中,object
似乎需要添加,预期的输出是什么,实际的结果是什么。人们现在只能猜测出哪里出了问题,而不需要你解释,你的结果与你的预期有什么不同。此外,如果有运行时错误或任何有助于发现问题的东西,feel可以在问题中列出它。欢迎访问SO:)@LeGEC我不知道错误可能在哪里,也不知道如何解决问题。*OP已经更新了他的代码。我的错误,你的修复可以解决问题。谢谢LeGEC!!最好的答案是everrrrr!我再次更新了我的问题。你能再看一次吗?
function (objects) {
for(var i = 0; i < objects.length; i++) {
var object = objects[i];
...
function (objects) {
var i, object;
for(i = 0; i < objects.length; i++) {
object = objects[i];
...