![](/img/trans.png)
[英]How to call a function after an asynchronous for loop of Object values finished executing
[英]How to call function only after the executing of the other function is completly finished
在下面的代碼中, 僅在存儲了頁面屬性CQ.form.SlingSubmitAction(dialog.form, config);
之后 ,我才想使用功能siteAdmin.reloadPages()
重新加載siteadmin頁面CQ.form.SlingSubmitAction(dialog.form, config);
成功執行。
以下函數提交表單,然后調用callback()
函數,該函數反過來重新加載siteadmin頁面:
function foo(dialog, config, callback) {
var action = new CQ.form.SlingSubmitAction(dialog.form, config);
dialog.form.doAction(action);
dialog[dialog.closeAction]();
callback();
}
函數調用:
foo(dialog,action, function() {
var siteAdmin = CQ.Ext.getCmp(window.CQ_SiteAdmin_id);
siteAdmin.reloadPages();
});
問題是成功提交pageProperties( dialog.form
)后,不會對siteadmin頁面進行更改。 例如,加載的pageTitle是舊值。
僅在成功提交表單后,如何重新加載siteadmin頁面?
您可以嘗試在配置中指定成功功能,如下所示。
function foo(dialog, config, callback) {
var action = new CQ.form.SlingSubmitAction(dialog.form, {
success: function(){
var siteAdmin = CQ.Ext.getCmp(window.CQ_SiteAdmin_id);
siteAdmin.reloadPages();
}
});
dialog.form.doAction(action);
dialog[dialog.closeAction]();
}
這樣可以確保僅在請求成功后才重新加載siteadmin。
在此處檢查可用於您的配置的其他選項。
您應該從CQ.form.SlingSubmitAction的成功回調中調用foo的回調
function foo(dialog, config, callback) {
var action = new CQ.form.SlingSubmitAction(dialog.form,
{
params: config.params,
success: function(frm, resp) {
callback();
}
});
dialog.form.doAction(action);
dialog[dialog.closeAction]();
}
對於表單提交是否成功,我沒有任何測試。 您可以簡單地避免調用callback()函數,直到通過這樣的測試為止。 或者,您可以將測試放入callback()函數中,直到通過測試后才進行頁面重新加載。 或者,您可以估計將表單提交傳輸到Web服務器需要多長時間,以及服務器處理數據需要多長時間,然后執行以下操作:
setTimeOut("callback();", 500); //wait 500 milliseconds (sample estimate)
要么
setTimeOut("siteAdmin.reloadPages();", 500); //inside the callback() function
請注意,這假定提交的數據始終可以成功處理,但是使用setTimeout()無疑是一種確保在調用另一個函數之前完成一個函數的通用方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.