Javascript函数可以写入控制台,但不能返回值

Javascript function can write to console but not returning value

本文关键字:控制台 但不能 返回值 函数 Javascript      更新时间:2023-09-26

我在javascript中有一个函数,它可以将输出写入控制台,但无法返回值。。

fetchData: function(dateToFetch){
            if (mP.viewMode == 1){
                $.each(mealData.DailymPs, function(k, item){
                    if( item.Date == formatDate(mP.chosenDate) ){
                        mP.DayPlan.mPDayData = item;
                        return mP.populateMealDayPlan();
                    }       
                })
            } else if (mP.viewMode == 2){
            //  debugger;
                $.each(mealData.DailymPs, function(k, item){
                    if( item.Date == (dateToFetch) ){
                        mP.DayPlan.mPDayData = item;
                        console.log(mP.populateMealDayPlan());
                        var returnObj = mP.populateMealDayPlan();
                        return returnObj;
                    }       
                })
            }
        }

您应该能够通过将其从更改来修复它

...
$.each(mealData.DailymPs, function(k, item){
    if( item.Date == (dateToFetch) ){
        mP.DayPlan.mPDayData = item;
        console.log(mP.populateMealDayPlan());
        var returnObj = mP.populateMealDayPlan();
        return returnObj;
    }       
})
...

...
var returnObj = null;
$.each(mealData.DailymPs, function(k, item){
    if( item.Date == (dateToFetch) ){
        mP.DayPlan.mPDayData = item;
        console.log(mP.populateMealDayPlan());
        returnObj = mP.populateMealDayPlan();
        return false; // break out of each()
    }       
})
if(returnObj != null) return returnObj;
...

注意:您还需要将返回变量外部化为if条件。我已经证明了如何在其他情况下做到这一点。

如果要从$.each循环返回一些内容,请将其分配给外部作用域中的变量return false;以中断循环,然后在$.each();调用后返回。

如果没有看到mPpopulateMealDayPlan,我的第一个猜测是,两次调用函数来获取值会改变mP的一些内部值。换句话说,如果我是对的,并且你注释掉console.log,应该会有一个返回值。你也可以做:

var returnObj = mP.populateMealDayPlan();    
console.log(returnObj);

而不是在console.log 中调用mPpopulateMealDayPlan

如果不是这样的话,那么我认为我们需要更多的背景来提供帮助。

您的return语句从传递给each方法的函数返回,而不是从fetchData函数返回。grep函数在这里很有用:

fetchData: function(dateToFetch) {
  var selector = mP.viewMode == 1 ? function(item) { return item.Date == formatDate(mP.chosenDate) } : function (item) { return item.Date == dateToFetch};
  var matched = $.grep(mealData.DailymPs, selector);
  if (matched.length) {
    var item = matched[0];
    mP.DayPlan.mPDayData = item;
    console.log(mP.populateMealDayPlan());
    return mP.populateMealDayPlan();
  }
}
相关文章: