diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 8a691e8012..28d6727e18 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -181,8 +181,7 @@ frappe.ui.form.Form = class FrappeForm { me.layout.refresh_dependency(); me.layout.refresh_sections(); - let object = me.script_manager.trigger(fieldname, doc.doctype, doc.name); - return object; + return me.script_manager.trigger(fieldname, doc.doctype, doc.name); } }); @@ -197,7 +196,7 @@ frappe.ui.form.Form = class FrappeForm { if(doc.parent===me.docname && doc.parentfield===df.fieldname) { me.dirty(); me.fields_dict[df.fieldname].grid.set_value(fieldname, value, doc); - me.script_manager.trigger(fieldname, doc.doctype, doc.name); + return me.script_manager.trigger(fieldname, doc.doctype, doc.name); } }); }); diff --git a/frappe/public/js/frappe/model/model.js b/frappe/public/js/frappe/model/model.js index 50f957c714..ce15360977 100644 --- a/frappe/public/js/frappe/model/model.js +++ b/frappe/public/js/frappe/model/model.js @@ -465,31 +465,31 @@ $.extend(frappe.model, { }, trigger: function(fieldname, value, doc) { - let tasks = []; - var runner = function(events, event_doc) { - $.each(events || [], function(i, fn) { - if(fn) { - let _promise = fn(fieldname, value, event_doc || doc); + const tasks = []; + + function enqueue_events(events) { + if (!events) return; + + for (const fn of events) { + if (!fn) continue; + + tasks.push(() => { + const return_value = fn(fieldname, value, doc); // if the trigger returns a promise, return it, // or use the default promise frappe.after_ajax - if (_promise && _promise.then) { - return _promise; + if (return_value && return_value.then) { + return return_value; } else { return frappe.after_server_call(); } - } - }); + }); + } }; if(frappe.model.events[doc.doctype]) { - tasks.push(() => { - return runner(frappe.model.events[doc.doctype][fieldname]); - }); - - tasks.push(() => { - return runner(frappe.model.events[doc.doctype]['*']); - }); + enqueue_events(frappe.model.events[doc.doctype][fieldname]); + enqueue_events(frappe.model.events[doc.doctype]['*']); } return frappe.run_serially(tasks);