Я собираю простую функцию отправителя электронной почты (да, я знаю, что я не должен ставить ее в свой интерфейс, это просто контрольная работа). Функциональность работает, но мне нужно вернуть сообщение статуса моему контроллеру, чтобы я мог отображать его на моей странице, как только сообщение было отправлено/отклонено.Как вернуть значение контроллеру из функции обратного вызова в службе по обещанию
Я пытаюсь заставить его работать в течение нескольких часов, но отсутствие у меня надлежащих знаний, работающих с обратными вызовами/обещаниями, не дает мне возможности, поэтому мне нужно руководствоваться. Как мне изменить код ниже, чтобы контроллер мог получить доступ к сообщению о статусе?
core.service('email', ['$q', 'fetchContent', function($q, fetchContent) {
return {
sendEmail: function(info) {
// Fetch token and recipient info from JSON file
var getEmailInfo = fetchContent.getEmailInfo();
getEmailInfo.then(function(res) {
// Access the token and recipient from the JSON file we just requested
var token = res.data.email.key,
recipient = res.data.email.recipient;
// Create a new mandrill instance and set the params
var emailProvider = new mandrill.Mandrill(token),
params = {
"message": {
"from_email": info.sender,
"to":[
{ "email": recipient }
],
"subject": info.company,
"text": info.message
}
};
// Return a deferred promise containing our status message
var deferred = $q.defer();
emailProvider.messages.send(params, function(res) {
deferred.resolve('Success message');
}, function(err) {
deferred.reject('Error message');
})
return deferred.promise;
});
}
}
}]);
А потом из моего контроллера я хочу получать сообщения о состоянии, успех или ошибку, из функции sendEmail
в моей службе:
$scope.send = function(data) {
var validate = validation.validateEmail(data);
validate.then(function(res) {
if (res !== true) {
$scope.error = res;
}
else {
var status = email.sendEmail(data);
console.log(status); // Always becomes undefined now
}
});
}
Уже попробовал это, и она по-прежнему говорит, что email.sendEmail (данные) не определено, так что поэтому я не могу назвать то() на нем :( – Chrillewoodz
Может быть, что обещание не может быть возвращено изнутри другой функции()? Теперь он находится внутри getEmailInfo.then (....) – Chrillewoodz
Решил его наконец .. было просто неправильно пойте оператор return перед getEmailInfo.then (...), чтобы он фактически что-то возвращал из функции sendEmail. – Chrillewoodz