2014-03-26 48 views
0

我使用此函數從Web服務中檢索數組。在javascript中使用動態參數的函數

button.onclick = function(item) { 
      var nonReplying = new Array(getNoreply(item)); 
      console.log(nonReplying); 
      setTimeout(unInviteUsers(item, nonReplying), 2500); 
     }.bind(button, EventsArray[i][1]); 

然後函數

function unInviteUsers(event,nonReplying) 
{ 

     //remember to parseInt() the first param, Event ID as well 
     for(var i = 0; i <= nonReplying.length; i++) 
     { 
      unInvite(event,parseInt(nonReplying[0][i].replace('"','').replace('"','')),AccessToken); 
     } 
} 

調用此函數

function unInvite(event, user) 
{ 

    $.ajax({ 
    url: 'https://graph.facebook.com/'+event+'/invited/'+user+'?access_token='+AccessToken, 
    type: 'DELETE', 
    success: function(result) 
    { 
     console.log(JSON.stringify(result)); 
    } 
    }); 
} 

但當button.onclick被觸發一些如何數組nonReplying不通過和unInviteUsers()返回

TypeError: 'undefined' is not an object (evaluating 'nonReplyingArray[0][i].replace')

And b Ÿ方式,我如何正確強制一個函數等到其他函數完全結束?

回答

0

nonReplying其實是一個二維數組?

此外,除了從undefined錯誤,

setTimeout(unInviteUsers(item, nonReplying), 2500); 

不會做你想要的。我相信你希望那個unInviteUsers在2.5秒後開火。 setTimeout的第一個參數需要是對函數的引用。除非unInviteUsers本身返回一個匿名函數,這不會做伎倆,但這可能是:

setTimeout(function() { unInviteUsers(item, nonReplying) }, 2500); 
+0

是的,這是一個雙調。 array – user3125138

+0

嗯,另一件事:你的for循環的中止條件是'<='而不是'<(基於索引0的長度),這可能是一個問題。 :) – UweB

+0

恩我以前試過這個,但實際上設置<而不是<=沒有達到數組中的每個元素......但謝謝你的建議。順便說一句,你會如何強制unInviteUsers()等待getNoreply(item)完成......我知道Javascript不會等待函數完成,它會立即執行另一個函數 – user3125138