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

时间:2012-02-21 16:13:44

标签: javascript jquery

我在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;
                    }       
                })
            }

        }

4 个答案:

答案 0 :(得分:2)

您应该可以通过以下方式修复它:

...
$.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条件下外部化返回变量。我已经演示了如何为else条件做到这一点。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在没有看到mP.populateMealDayPlan的情况下,我的第一个猜测就是调用函数两次以获取值来更改mP的某些内部值。换句话说,如果我是对的并且你注释掉了console.log,那么应该有一个返回值。你也可以这样做:

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

而不是在console.log中调用mP.populateMealDayPlan

如果情况并非如此,那么我认为我们需要更多背景来帮助。

答案 3 :(得分:0)

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

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();
  }
}