diff --git a/frappe/public/js/frappe/form/script_manager.js b/frappe/public/js/frappe/form/script_manager.js index f86ab2520e..97663eb0d7 100644 --- a/frappe/public/js/frappe/form/script_manager.js +++ b/frappe/public/js/frappe/form/script_manager.js @@ -71,47 +71,45 @@ frappe.ui.form.ScriptManager = Class.extend({ // trigger all the form level events that // are bound to this event_name let me = this; - return new Promise(resolve => { - doctype = doctype || this.frm.doctype; - name = name || this.frm.docname; - - let tasks = []; - let handlers = this.get_handlers(event_name, doctype); - - // helper for child table - this.frm.selected_doc = frappe.get_doc(doctype, name); - - let runner = (_function, is_old_style) => { - let _promise = null; - if(is_old_style) { - // old style arguments (doc, cdt, cdn) - _promise = me.frm.cscript[_function](me.frm.doc, doctype, name); - } else { - // new style (frm, doctype, name) - _promise = _function(me.frm, doctype, name); - } - - // if the trigger returns a promise, return it, - // or use the default promise frappe.after_ajax - if (_promise && _promise.then) { - return _promise; - } else { - return frappe.after_server_call(); - } - }; - - // make list of functions to be run serially - handlers.new_style.forEach((_function) => { - tasks.push(() => runner(_function, false)); - }); + doctype = doctype || this.frm.doctype; + name = name || this.frm.docname; - handlers.old_style.forEach((_function) => { - tasks.push(() => runner(_function, true)); - }); + let tasks = []; + let handlers = this.get_handlers(event_name, doctype); - // run them serially - frappe.run_serially(tasks).then(resolve()); + // helper for child table + this.frm.selected_doc = frappe.get_doc(doctype, name); + + let runner = (_function, is_old_style) => { + let _promise = null; + if(is_old_style) { + // old style arguments (doc, cdt, cdn) + _promise = me.frm.cscript[_function](me.frm.doc, doctype, name); + } else { + // new style (frm, doctype, name) + _promise = _function(me.frm, doctype, name); + } + + // if the trigger returns a promise, return it, + // or use the default promise frappe.after_ajax + if (_promise && _promise.then) { + return _promise; + } else { + return frappe.after_server_call(); + } + }; + + // make list of functions to be run serially + handlers.new_style.forEach((_function) => { + tasks.push(() => runner(_function, false)); }); + + handlers.old_style.forEach((_function) => { + tasks.push(() => runner(_function, true)); + }); + + // run them serially + return frappe.run_serially(tasks); }, has_handlers: function(event_name, doctype) { let handlers = this.get_handlers(event_name, doctype); diff --git a/frappe/public/js/frappe/model/model.js b/frappe/public/js/frappe/model/model.js index 23f5e6f0d5..9bb559a4a2 100644 --- a/frappe/public/js/frappe/model/model.js +++ b/frappe/public/js/frappe/model/model.js @@ -402,7 +402,7 @@ $.extend(frappe.model, { }); } - frappe.run_serially(tasks); + return frappe.run_serially(tasks); }, get_doc: function(doctype, name) { diff --git a/frappe/public/js/legacy/clientscriptAPI.js b/frappe/public/js/legacy/clientscriptAPI.js index 78e5c6b517..47d2b77122 100644 --- a/frappe/public/js/legacy/clientscriptAPI.js +++ b/frappe/public/js/legacy/clientscriptAPI.js @@ -281,9 +281,9 @@ _f.Frm.prototype.set_value = function(field, value, if_missing) { } me.refresh_field(f); - + return Promise.resolve(); } else { - frappe.model.set_value(me.doctype, me.doc.name, f, v); + return frappe.model.set_value(me.doctype, me.doc.name, f, v); } } } else { @@ -293,14 +293,16 @@ _f.Frm.prototype.set_value = function(field, value, if_missing) { } if(typeof field=="string") { - _set(field, value) + return _set(field, value) } else if($.isPlainObject(field)) { + let tasks = []; for (var f in field) { var v = field[f]; if(me.get_field(f)) { - _set(f, v); + tasks.push(() => _set(f, v)); } } + return frappe.run_serially(tasks); } }