2016-09-25 48 views
-1

我有一個函數:製作JS函數返回提供給其他功能

removePastUsersFromArray().then(function(promises){ 
     var arrayOfPastUsers = []; 
     for(var i = 0; i < promises.length; i++){ 
     for(var j = 0; j < promises[i].length; j++){ 
      arrayOfPastUsers.push(promises[i][j]); 
     } 
    } 
}) 

我怎樣才能讓arrayOfPastUsers提供給其他的功能呢?到目前爲止,如果我調用這個函數,然後登錄arrayOfPastUsers它說它是未定義的。我希望能夠訪問該數組或將其拉入另一個函數,以便我可以對另一個函數進行評估。

我試圖加入return arrayOfPastUsers哪些沒有幫助。我也嘗試添加該行:

return new Promise(function(resolve, reject){ resolve(arrayOfPastUsers);)}也沒有解決這個問題

+0

爲什麼要將一個'Promise'對象數組與其他對象進行比較?要回答你的問題,只需在要訪問的範圍內聲明'arrayOfPastUsers'即可。 –

+1

您將遇到涉及異步代碼的問題。即使您安排其他代碼訪問該數組,您如何確保在其他代碼訪問之前調用了'.then()'回調? – Pointy

+0

@DanielB這就是即時通訊說。我有一個promise.all給了我2個數組。我已經將它們組合成了1個數組(arrayOfPastUsers),然後我希望該數組可以在另一個函數中使用,並且不知道如何做到這一點 –

回答

1

簡單的方法將被宣佈「arrayOfPastUsers」成功回調你的承諾以外的,只是裏面賦予它。這會讓你在外部函數範圍內的任何地方使用該變量。

0
function container(removePastUsersFromArray){ 
    var arrayOfPastUsers = []; 
    removePastUsersFromArray().then(function(promises){ 

     for(var i = 0; i < promises.length; i++){ 
     for(var j = 0; j < promises[i].length; j++){ 
      arrayOfPastUsers.push(promises[i][j]); 
     } 
    } 
    }) 
    return arrayOfPastUsers ; 
} 

var myArr= new container(removePastUsersFromArray); 

//myArr will be full **after** promise fulfill 

這將創建一個閉包。

0

U可以使它成爲一個全局數組。