【问题标题】:Is there a way to return a returned value from function inside a function [duplicate]有没有办法从函数内部的函数返回返回值[重复]
【发布时间】:2021-12-30 22:34:10
【问题描述】:

我正在尝试从此函数返回用户,该函数使用另一个函数打开 json 文件我可以返回整个函数的用户

    function RandomAccount(){
        alert('just confirm');
        readTextFile("./data.json", function(text){
        var data = JSON.parse(text);
        var length = data[0].length;
        // better random
        var i = generateUniqueRandom(length)-1;
        user = data[0][i]['follow_username'];
        return user;
        
    });
   //i want to return user here
    }

【问题讨论】:

  • 您可以访问外部范围。在您的alert 行下,您可以创建一个新变量var myusers = [];,并在您的函数中设置myusers = .....。当前的return 声明似乎不合适,因为此闭包由readTextFile() 函数调用,我怀疑该函数需要“user”。
  • 如果readTextFile 是异步的,则在外部范围内声明变量将不起作用,因为函数RandomAccount 可能会在评估readTextFile 的回调函数之前返回。在这种情况下,您需要向 RandomAccount 提供回调并从 readTextFile 的回调中调用它,或者使用 Promises,例如。

标签: javascript html jquery


【解决方案1】:

在调用内联函数之前声明用户。示例:

function RandomAccount(){
        var user;
        alert('just confirm');
        readTextFile("./data.json", function(text){
        var data = JSON.parse(text);
        var length = data[0].length;
        // better random
        var i = generateUniqueRandom(length)-1;
        user = data[0][i]['follow_username'];
    });
   //i want to return user here
   return user;
    }

【讨论】:

  • 一旦我尝试这个,它就会给我一个错误 undefined user ...。我想通过 let account = randomAccount(); 访问一个用途
  • 我的猜测是readTextFile是一个匿名/非阻塞函数,在这种情况下let account = RandomAccount();将不起作用,因为RandomAccount会在回调函数readTextFile的内容之前返回已被执行。您将需要使用另一个回调函数,Promises 或 Async-Await。
  • 请告诉我如何使用这种方法
猜你喜欢
  • 2021-07-02
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多