我正在尝试找出创建具有多个回调的函数的最佳方法。
简而言之,我在整个应用程序中拥有不同的触发器,这些触发器可以在执行关键操作时(例如当票证关闭或已向其分配成员时)发送电子邮件。棘手的部分是,有时需要同时发出多封不同的电子邮件。
这是我的电子邮件功能:
function sendEmail(template, to, cc, bcc, callback, optional=null){
// Define vars needed
var body = '',
subject = '';
// Based on the template..
switch(template){
case 'updatedTask':
// Define the subject
subject = 'Tool Request - Updated Task';
// Define our body
body += 'Hello, <br /><br />';
body += 'Blah Blah';
body += 'Footer';
break;
case 'removedTaskOwner':
// Define the subject
subject = 'Tool Request - Removed Task Owner';
// Define our body
body += 'Hello, <br /><br />';
body += 'Blah Blah';
body += 'Footer';
break;
case 'completedTask':
// Define the subject
subject = 'Tool Request - Completed Task';
// Define our body
body += 'Hello, <br /><br />';
body += 'Blah Blah';
body += 'Footer';
break;
}
// Send our email
$.ajax({
url: "../resources/Classes/class.email.php",
type: "POST",
cache: false,
data: {
from: "noreply@domain.com",
to: to,
cc: cc,
bcc: bcc,
subject: subject,
body: body
},
error: function(err) {
alert(err.statusText);
},
success: function(data) {
// Handle Callback
callFunction(callback);
}
});
}
// Callbacks
function callFunction(func) {
func();
}
// Reload the page
function refresh(){
location.reload('true');
}
这是我目前使用该功能的方式:
// Once the email is sent, it triggers a function called refresh
sendEmail('taskUpdated', toArray, '', '', refresh, '');
这就是我正在尝试做的事情:
// Define our remove function as a callback
var remove = function() {
sendEmail('removeTaskOwner', toArray, '', '', refresh, '');
}
// Define our completed function as a callback
var completed = function() {
sendEmail('completedTask', toArray, '', '', refresh, '');
}
// If there is a completed date, we need to send out two separate emails
var callbacks = Array();
if(completionDate){
callbacks.push('completed', 'remove');
}else{
callbacks.push('remove');
}
sendEmail('taskUpdated', toArray, '', '', callbacks, '');
我遇到的问题是,callbacks
似乎不能是回调函数数组。
我想要做的总体所需功能是能够传递多个模板
和收件人
并在电子邮件末尾触发最终功能发送出去,比如页面刷新。
最佳答案
您可以使用 Promise。 jQuery 已经内置了这个功能。 $.ajax
返回一个 promise 。
function sendEmail(template, to, cc, bcc, optional=null){
// etc..
// return here!
return $.ajax({
url: "../resources/Classes/class.email.php",
type: "POST",
cache: false,
data: {/*etc*/}
});
}
然后你可以这样做:
var remove = function() {
sendEmail('removeTaskOwner', toArray, '', '', '' ).done(refresh);
}
// Define our completed function as a callback
var completed = function() {
sendEmail('completedTask', toArray, '', '', '').done(refresh);
}
sendEmail("taskUpdated", toArray, "" , "").done(function () {
if(completionDate){
completed();
}
remove();
}).fail(function (err) {
alert(err.statusText);
});
关于javascript - 具有回调数组的 JS 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809607/