2013-10-31 35 views
0

HtmlService docs async sample code ...HtmlService異步加載示例代碼

如何參數things得到傳遞給函數showThings(things)在頁面加載後?

按原樣運行,html列表被清空。

在我Code.gs,我在...

function getLotsOfThings() { 
    return [1,2,3]; 
} 

添加,但它沒有通過或存儲結果,以便showThings()可以使用它。

+0

工作正常,我 功能的doGet(要求){ 回報HtmlService.createTemplateFromFile(「頁」) 。評估()setSandboxMode(HtmlService.SandboxMode.NATIVE); ()被調用'' return [1,2,3]; } – DavidF

+0

是的,我看到'getLotsOfThings()'被調用,但不知道'showThings()'是如何被髮送'things'的。 –

回答

1

內置google.script.run爲我們做到了這一點。

您可以認爲Apps Script平臺通常在客戶端獲取您的服務器端函數JSON.stringify然後JSON.parse的返回值。而且由於withSuccessHandler收到你的返回函數,運行它並傳遞參數很容易。由於shown by Frits

這裏是什麼withSuccessHandlerdocumentation說:

因爲客戶端代碼繼續到下一行,而不必等待 一個服務器調用來完成,google.script API允許你指定 另一個客戶端當服務器響應時運行端功能。 如果服務器函數返回值,則API將該值作爲參數傳遞給新函數 。

順便說一下,代碼示例對我來說工作得很好。你有什麼問題嗎?這是我使用的代碼(加上例如確切的html文件,我把它叫做「頁」):

function doGet() { 
    return HtmlService.createHtmlOutputFromFile('page'); 
} 

function getLotsOfThings() { 
    return [1,2,3]; 
} 
+0

正在使用'createTemplateFromFile()'並且缺少不可見的API傳遞概念。 –

+0

'createTemplateFromFile'也應該可以工作。這是沒有必要的,因爲沒有什麼可以評估的HTML例子。實際上,這是做異步工作的主要想法。當使用「createOutput ...」而不是「createTemplate ...」時,相同的頁面加載速度會更快,特別是因爲它可以緩存調色板部分,而不必每次都重做(創建模板時無法避免) 。 –

0

我認爲這可能是一個錯誤。

它仍然可以工作,雖然,看到這個例子:從它不是什麼明顯的things值雖然,或它來自哪裏代碼

function foo(arg) { 
    console.log(arg); 
} 
function run(callback) { 
    callback("bar"); 
} 
run(foo); // "bar" 

+0

是的,我試圖找出'東西'來自哪裏或假設是 –