Parse-Javascript嵌套调用

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; }

我正在使用Parse编写javascript代码。我有用户类和订阅类。所有用户的订阅信息都存储在subscription类中,因此它就像一对多关系

我想检索用户信息和每个用户的订阅计数,并将其存储在对象数组中

我的尝试如下:

    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()

循环的每次迭代都会分配一个新的
对象
变量,您应该避免“shared
var
”错误


指出错误

一个常见的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];
        ...