簡體   English   中英

Google App腳本-函數返回未定義

[英]Google App Script - Function Returning Undefined

我正在嘗試調用給定Slack Workspace和頻道名稱時獲取頻道ID的函數。 我可以在函數中獲得正確的結果,但是當我嘗試在其他地方調用該函數時,它返回的是未定義的。

獲取頻道ID的函數

 //GET CHANNEL ID FROM LIST OF ALL CHANNELS IN WORKSPACE function getChannelID(workspaceName, pageLimit, channelName, nextCursor){ var channelListResponseURL = 'https://slack.com/api/conversations.list'; var payload = { 'limit': pageLimit, 'types': 'public_channel, private_channel', 'cursor' : nextCursor }; var options = createURLargs(workspaceName, payload); var channelListResponse = UrlFetchApp.fetch(channelListResponseURL, options); var channelListJson = channelListResponse.getContentText(); var channelListData = JSON.parse(channelListJson); //iterate through each channel in the returned JSON object and sets the channel ID for the one matching the channelName for (var i in channelListData.channels){ if(channelListData.channels[i].name == channelName){ var channelID = channelListData.channels[i].id; Logger.log('FOUND CHANNEL ID: '+ channelID); return channelID;// IF CHANNEL ID FOUND, THEN EXIT getChannelID FUNCTION AND RETURN CHANNEL ID } } // IF NO CHANNEL ID IS FOUND, THEN CHECK TO SEE IF PAGINATION IS IN EFFECT, UPDATE CURSOR, AND RERUN getChannelID FUNCTION if (channelListData.response_metadata.next_cursor && channelListData.response_metadata.next_cursor != ""){ nextCursor = channelListData.response_metadata.next_cursor; getChannelID(workspaceName, pageLimit, channelName, nextCursor); } else { // IF CHANNEL PAGINATION IS NOT IN EFFECT, OR REACHED LAST PAGE AND NO RESULT IS FOUND return 'No Channel Found in Workspace'; } } 
`

我可以在記錄器中清楚地看到“ FOUND CHANNEL ID:CXXXXXX”字符串,因此我確定它可以正確找到它。

但是,當我從主函數調用此getChannelID時,它返回的是未定義的。

  var channelID = getChannelID(workspaceName, pagLimit, channelName, nextCursor); Logger.log(channelID); 

奇怪的是,當未對來自Slack的JSON對象進行分頁時,這似乎可行,但是當對結果進行分頁時,我似乎變得不確定。

任何想法為什么返回的結果都不確定,即使它在函數中也有效?

我認為在您的遞歸函數中,不會返回該值。 那么如何修改呢?

來自:

if (channelListData.response_metadata.next_cursor && channelListData.response_metadata.next_cursor != ""){
  nextCursor = channelListData.response_metadata.next_cursor;
  getChannelID(workspaceName, pageLimit, channelName, nextCursor);
} else { 
  // IF CHANNEL PAGINATION IS NOT IN EFFECT, OR REACHED LAST PAGE AND NO RESULT IS FOUND
  return 'No Channel Found in Workspace';
}

至 :

if (channelListData.response_metadata.next_cursor && channelListData.response_metadata.next_cursor != ""){
  nextCursor = channelListData.response_metadata.next_cursor;
  return getChannelID(workspaceName, pageLimit, channelName, nextCursor); // Modified
} else { 
  // IF CHANNEL PAGINATION IS NOT IN EFFECT, OR REACHED LAST PAGE AND NO RESULT IS FOUND
  return 'No Channel Found in Workspace';
}

注意 :

  • channelListData.response_metadata.next_cursor && channelListData.response_metadata.next_cursor != ""為true時,不返回任何值。 所以我加了return

如果還不能解決問題,請告訴我。 我想修改它。

添加 :

據我了解,當運行遞歸函數時,過程返回到運行的行。 為了確認這一點,我准備了3個示例函數。

功能1
function foo3(value) {
  if (value == "") {
    foo3("bar");
  }
  return "ok";
}
功能2
 function foo2(value) { if (value == "") { return foo2("bar"); } else { return "ok"; } } 
功能3
 function foo3(value) { if (value == "") { foo3("bar"); } return "ok"; } 

當這些功能按如下方式運行時,

 var res1 = foo1(""); var res2 = foo2(""); var res3 = foo3(""); 

res1res2res3分別是undefinedokok

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM