2014-09-29 107 views
0

我曾希望爲Parse.com添加一個保存後觸發事件,通知我何時更新某類用戶的帳戶。在這種情況下,如果Parse.User中的列「user_ispro」爲真,我希望在保存後通過電子郵件發送(此列爲null或true)。我添加了下面的代碼,但每次更新都會收到電子郵件,而不僅僅是我的查詢。思考?Parse.com Cloud代碼 - 保存後

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: "[email protected]", 
        from_name: "Test", 
        to: [{ 
         email: "[email protected]", 
         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"); 
     } 
    }); 
}); 

回答

1

查詢的成功回調總是執行(讀取:查詢成功時),幾乎在每種情況下都是如此。當沒有結果時,您希望查詢失敗,這是錯誤的假設。

您應該添加一個檢查,如果結果爲空,並且只有在有實際結果時觸發電子郵件發送。如果出現錯誤,錯誤回調只會被觸發,空的結果不是錯誤(顯然)。

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: "[email protected]", 
       from_name: "Test", 
       to: [{ 
        email: "[email protected]", 
        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"); 
    } 
}); 
});