JavaScript中递归调用函数时,对象未更新

3
我试图通过递归函数获取数据,但当调用递归函数时,我的响应对象未更新。
    function checkData(id) {
    var response = {
        new_id: '',
        status: false
    }

    var order = somefunction(id);

    var isOriginal = order.isOriginal
    var enddate = order.enddate
    var new_id = order.originalId

    // first check
    if (enddate == '' && isOriginal) {
        response.new_id = new_id;
        response.status = true;
    }

    //second check
    if (!isOriginal) {
        if (new_id) {
            checkData(new_id); // recursive call
        }
    }
    return response;
}

如果第二个检查条件符合要求,则加载数据,但是在控制台显示响应时,它会显示之前初始化的初始数据。 回调函数中的响应变量没有更新。 但是,如果第一个检查通过,则会更新。

3
每次调用你的递归函数时,response 会被重新初始化。要么将对象放在更高的范围内,要么将其作为参数传递给函数。 - NullDev
2
请仅返回翻译后的文本:或返回您的递归调用结果,目前它正在递归工作但从未返回任何内容。 - coagmano
@FredStark,要将它返回到哪里?尝试在第一个检查中返回响应,但得到了相同的结果。 - Mangrio
2
然后它将递归,直到有一个原始响应,每个调用都将展开所有函数调用并最终从第一个调用返回该响应。否则,它将永远不会从递归调用中返回。 - coagmano
3
没有计数,它将继续递归,直到 isOriginal 为真。 - coagmano
显示剩余2条评论
1个回答

2

根据@Fred Stark的评论,通过调整递归调用成功解决了问题。

function checkData(id) {
var response = {
    new_id: '',
    status: false
}

var order = somefunction(id);

var isOriginal = order.isOriginal
var enddate = order.enddate
var new_id = order.originalId

// first check
if (enddate == '' && isOriginal) {
    response.new_id = new_id;
    response.status = true;
}

//second check
if (!isOriginal) {
    if (new_id) {
        return checkData(new_id); // recursive call ---> called return here
    }
}
return response;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接