Javascript 系列承诺和响应。云代码成功

Javascript 系列承诺和响应。云代码成功,javascript,parse-platform,promise,Javascript,Parse Platform,Promise,我有点困惑在哪里放置响应。使用连续承诺时成功 情况是这样的:我有一个云函数,它接受一系列电子邮件地址和当前用户。该函数执行以下操作: 根据当前用户的用户对象id查找当前用户。 迭代电子邮件地址数组 查找每个给定电子邮件地址是否有现有用户 如果存在现有用户,我们将检查现有用户和当前用户是否是朋友 如果他们不是朋友,就会建立友谊。 现在,当我在没有response.success的情况下运行此函数时,它会完全按照我的预期运行,并且会创建友谊条目。但是,无论我将响应放在代码中的何处,我都会得到resp

我有点困惑在哪里放置响应。使用连续承诺时成功

情况是这样的:我有一个云函数,它接受一系列电子邮件地址和当前用户。该函数执行以下操作:

根据当前用户的用户对象id查找当前用户。 迭代电子邮件地址数组 查找每个给定电子邮件地址是否有现有用户 如果存在现有用户,我们将检查现有用户和当前用户是否是朋友 如果他们不是朋友,就会建立友谊。 现在,当我在没有response.success的情况下运行此函数时,它会完全按照我的预期运行,并且会创建友谊条目。但是,无论我将响应放在代码中的何处,我都会得到response.success消息,并且所有序列化的承诺都不会执行

结果成功/失败的原因:我正在从iOS应用程序执行此功能,我希望在iOS端正确处理成功或失败案例

以下是云函数:

Parse.Cloud.define("friendExistingUsers", function(request, response) {

    // Get our parameters
    var addresses = request.params.emailAddresses;
    var userId = request.params.user;

    // Query for our user
    var userQuery = new Parse.Query("User");
    userQuery.equalTo("objectId", userId)
    userQuery.first().then(function(currentUser) {

        // if we find the user, walk the addresses
        var promise = Parse.Promise.as("success");
        _.each(addresses, function(address) {

            console.log(address);

            // add a then to our promise to handle whether a relationship is
            // being created.
            promise = promise.then(function() {

                // find if there is a user for that address
                var emailQuery = new Parse.Query("User");
                emailQuery.equalTo("email", address);
                emailQuery.first().then(function(addressUser) {

                    if (typeof addressUser != 'undefined') {

                        // found one.
                        console.log(addressUser);

                        // figure out if our current user and this user are
                        // friends.
                        var friendQuery = new Parse.Query("FVFriendship");
                        friendQuery.equalTo("from", currentUser);
                        friendQuery.equalTo("to", addressUser);
                        friendQuery.first().then(function(relationship) {

                            if (typeof relationship != 'undefined') {

                                // if they are, we need to pass.
                                console.log("Found a relationship: " = relationship)

                            } else {

                                // They are not.  Add the friendship
                                var Friendship = Parse.Object.extend("FVFriendship");
                                var friendship = new Friendship();
                                friendship.set("from", currentUser);
                                friendship.set("to", addressUser);
                                friendship.save().then(function(result) {
                                    console.log("Created a friendship: " + result)
                                });
                            };
                        });

                    } else {

                        // we did not find a user for that address
                        console.log("No user for " + address);

                    };
                });                        
            });
        });

        console.log(promise);

        return promise;
    }).then(function() {
        response.success("success");
    });
});
提前谢谢。如果还有什么可以补充的,请告诉我。

您的。然后,promise附带的回调函数应该返回一个promise。在使用承诺时,忽略这一点是常见的错误


此外,Parse似乎不像浏览器那样使用console.log显示对象,所以我将它们包装到JSON.stringify中

这不完全是一个代码片段。尝试将参数传递给方法thenfunctiondata{console.logdata.success},以便传递承诺值