0

特定の種類のユーザーのアカウントが更新されたときに通知する、保存後のトリガーを Parse.com に追加したいと考えていました。この場合、列 "user_ispro" が Parse.User で true の場合、保存後にメールを送信したいと考えています (この列は null から true のいずれかです)。以下のコードを追加しましたが、クエリだけでなく、更新ごとにメールが送信されます。考え?

Parse.Cloud.afterSave(Parse.User, function(request) {
    var Mandrill = require('mandrill');

    query = new Parse.Query(Parse.User);
    query.equalTo("user_ispro", true);
    query.find({
        success: function(results) {
            Mandrill.initialize('xxxx');
            Mandrill.sendEmail({
                message: {
                    text: "Email Text",
                    subject: "Subject",
                    from_email: "test@test.com",
                    from_name: "Test",
                    to: [{
                        email: "test@test.com",
                        name: "Test"
                    }]
                },
                async: true
            }, {
                success: function(httpResponse) {
                    console.log(httpResponse);
                    response.success("Email sent!");
                },
                error: function(httpResponse) {
                    console.error(httpResponse);
                    response.error("Uh oh, something went wrong");
                }
            });

        },
        error: function() {
            response.error("User is not Pro");
        }
    });
});
4

2 に答える 2

1

クエリの成功コールバックは常に実行されます (つまり、クエリが成功した場合)。これはほとんどの場合に当てはまります。結果がない場合にクエリが失敗すると予想していますが、これは間違った仮定です。

結果が空の場合はチェックを追加し、実際の結果がある場合にのみメール送信をトリガーする必要があります。エラー コールバックは、エラーが発生した場合にのみ発生します。空の結果は (明らかに) エラーではありません。

于 2014-09-29T14:40:16.580 に答える
0

Bjorn に感謝します。検索の代わりにカウント クエリを使用することになりました。結果の数が 0 より大きい場合は、電子メールを送信します。また、特定の objectId を照会していないことに気付いたので、これが最終的なコードでした。

Parse.Cloud.afterSave(Parse.User, function(request) {
var Mandrill = require('mandrill');

query = new Parse.Query(Parse.User);
query.equalto("objectId",request.object.id);
query.equalTo("user_ispro", true);
query.count({
    success: function(count) {

      if (count > 0) {
        Mandrill.initialize('xxxx');
        Mandrill.sendEmail({
            message: {
                text: "Email Text",
                subject: "Subject",
                from_email: "test@test.com",
                from_name: "Test",
                to: [{
                    email: "test@test.com",
                    name: "Test"
                }]
            },
            async: true
        }, {
            success: function(httpResponse) {
                console.log(httpResponse);
                response.success("Email sent!");
            },
            error: function(httpResponse) {
                console.error(httpResponse);
                response.error("Uh oh, something went wrong");
            }
        });

    },
    else {
        console.log("User is not Pro");
    }
});
});
于 2014-09-30T18:51:51.017 に答える