在我的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);
两者都以“未定义”的方式返回餐点。
答案 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>
您能否将其与实际代码进行比较,或者看看有什么不同?