函数在Lodash中同步返回

时间:2017-12-10 16:27:16

标签: javascript lodash

在我的AngularJS应用程序中,我有以下变量:

var meals = _.times(mealCount, function(index) {
    return new MealPlanResource({
      dayId:                  dayId,
      userFriendlyMealNumber: index + 1,
      items:                  [],
    });
  });

如何在__times完全执行之前使函数的下一行不运行?

我试过了:

var mealsDeferred = $q.defer();
var meals = mealsDeferred.resolve(getUpdatedMeals());

function getUpdatedMeals() {
    _.times(mealCount, function(index) {
      return new MealPlanResource({
        dayId:                  dayId,
        userFriendlyMealNumber: index + 1,
        items:                  [],
      });
    });
  }

以及:

var meals;
setTimeout(function() {
  _.times(mealCount, function(index) {
      return new MealPlanResource({
        dayId:                  dayId,
        userFriendlyMealNumber: index + 1,
        items:                  [],
      });
    });
}, 100);

两者都以“未定义”的方式返回餐点。

1 个答案:

答案 0 :(得分:1)

假设您的_.times()函数是来自LoDash的函数,那么您的代码应该按原样运行。

_.times()同步功能。它不是异步的。它在返回值之前完成所有执行。你不需要使用它的承诺,它们对你没有任何好处。

以下是您的代码的工作示例:

function MealPlanResource( args ) {
    _.assign( this, args );
}

var mealCount = 3;
var dayId = 1;

var meals = _.times(mealCount, function(index) {
    return new MealPlanResource({
        dayId: dayId,
        userFriendlyMealNumber: index + 1,
        items: [],
    });
});
  
console.log( meals );
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.4/lodash.min.js"></script>

您能否将其与实际代码进行比较,或者看看有什么不同?