【问题标题】:array that is being logged is showing up as blank when returned正在记录的数组在返回时显示为空白
【发布时间】:2015-05-26 12:04:31
【问题描述】:

我正在处理一个非常令人沮丧的问题,我可以 console.log 一个数组,但是当我尝试返回它时,它返回一个没有长度的空白数组。

下面是代码,它得到的输入类似于 [0.1234]。可选地,还有其他参数,但现在不需要这些参数。没有它们,它只是返回一个数组。实际上只是输入。嗯,这就是我想要它做的。

在 else 套件中,我 console.log(oArr) 并且它记录正常,但是当我返回它时,它返回一个空白数组。在那里你还会看到我必须将输入参数 i 传输到输入变量,因为当我尝试在 setTimeout 中检查它的长度时,它给出的长度为零,即使当我记录它时,它是什么记录的长度不为零。但是当我将它分配给一个新的变量时,它工作得很好。 setTimeout 存在的原因是,除非我使用 setTimeout 将其放入队列中,否则 for 循环不会运行。

function runV(i, l, y){
    var a=[],o=[],x={};
    if(i[1]!==undefined){
        a=i[0];
        if(i.length>1) i=i[1];
        else i=undefined;
        setTimeout(function(){
            for(var j=0; j<a.length; j++){
                var oArr=[];
                oArr.push(a[j]);
                if(i===undefined){
                    if(y!==undefined) o=y.activate(oArr);
                    else return oArr;
                }
                else{
                    if(y!==undefined) x['adverbs']=y.activate(oArr);
                    else return oArr;
                }
            }
        }, 0);
        if(i!==undefined){
            for(var j=0; j<i.length; j++){
                var oArr=[];
                oArr.push(i[j]);
                if(l!==undefined) x['emotions']=l.activate(oArr);
            }
        }
    }
    else{
        var input;
        setTimeout(function(){
            input=i;
            for(var j=0; j<input.length; j++){
                var oArr=[];
                oArr.push(i[j]);
                console.log(oArr);
                if(l!==undefined) o=l.activate(oArr);
                return oArr;
            }
        }, 0);
    }
    if(x.adverbs!==undefined) return x;
    return o;
}

【问题讨论】:

  • 你从一个匿名函数返回它
  • setTimeout 中的函数异步运行。你不能从中返回一些东西。 runV 在启动计时器时返回,它不会等待它完成。
  • @iccthedral 从匿名函数返回没什么问题,问题是从异步函数返回。
  • @Barmar 没错。那我如何返回 oArr?除非在 setTimeout 中,否则 for 循环不会运行
  • 我想不出for循环不能正常运行的任何原因。

标签: javascript arrays function


【解决方案1】:

您不能从通过setTimeout 运行的函数返回结果。您需要从所有函数中删除它,并直接在调用函数中运行该代码。

【讨论】:

    【解决方案2】:

    您正在从匿名函数返回结果:

    setTimeout(function(){
       ...
       else return oArr; 
       ...
    }, 0);
    

    如果你想使用这种结构,你应该使用回调函数作为“runV”函数的参数。

    【讨论】:

    • 那我如何返回oArr?除非在 setTimeout 中,否则 for 循环不会运行
    • 还在继续,看这里:the-irf.com/deep/lstm.html。在控制台中,运行 runV(vectorise('hello'));你得到一个空白数组。当我将这些函数的定义粘贴并输入到控制台中然后运行它们时,它就可以工作了。但这对我的实施有何帮助。
    • vectorise('hello') 返回空数组您是否尝试使用浏览器中的调试器?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 2016-06-02
    • 2022-12-12
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多