2014-09-29 2 views
0

Я надеялся добавить триггер после сохранения на Parse.com, который уведомил меня, когда был обновлен определенный тип учетной записи пользователя. В этом случае, если столбец «user_ispro» равен true в Parse.User, я хочу, чтобы его отправляли по электронной почте после сохранения (этот столбец имеет значение null или true). Я добавил код ниже, но я получаю по электронной почте все обновления, а не только мой запрос. Мысли?Parse.com Cloud Code - After Save

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

Спасибо, Бьорн, в итоге я использовал счетчик вместо поиска. Если число результатов больше 0, отправьте электронное письмо. Также понял, что я не запрашивал конкретный объект, поэтому это был мой последний код:

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"); 
    } 
}); 
}); 
Смежные вопросы