【问题标题】:Making a JS function return available to other functions使 JS 函数返回可用于其他函数
【发布时间】:2017-02-02 21:00:35
【问题描述】:

我有一个函数:

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);)}也没有解决

【问题讨论】:

  • 为什么要将Promise 对象数组与其他对象进行比较?要回答您的问题,只需在您要访问的范围内声明 arrayOfPastUsers
  • 您将遇到与异步代码相关的问题。即使您安排其他代码访问该数组,您如何确定在其他代码访问之前已经调用了 .then() 回调?
  • @DanielB 这就是我所说的。我有一个 promise.all 给我 2 个数组。我已将它们组合成 1 个数组 (arrayOfPastUsers),然后我希望该数组在另一个函数中可用,但不知道该怎么做
  • @Pointy 肯定有办法做到这一点吗?数组肯定可以用于其他函数吗?
  • @JaromandaX 我的意思是。该数组中的任何对象都可以被另一个函数使用。

标签: javascript arrays promise return


【解决方案1】:

简单的方法是在您的承诺的成功回调之外声明“arrayOfPastUsers”,然后在其中分配它。这将使您可以在外部函数范围内的任何地方使用该变量。

【讨论】:

    【解决方案2】:
    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
    

    这将创建一个闭包。

    【讨论】:

      【解决方案3】:

      你总是可以把它变成一个全局数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2021-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多