2016-09-25 95 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可以使它成为一个全局数组。