带有 angular.forEach 的简单异步代码

Posted

技术标签:

【中文标题】带有 angular.forEach 的简单异步代码【英文标题】:Simple async code with angular.forEach 【发布时间】:2015-08-10 20:00:17 【问题描述】:

标志总是假的。我该怎么办?

代码在这里:

var list = ['NOVALUE','VALUE','NOVALUE'];
var flag = false;
angular.forEach(list, function(value)
    if('VALUE' === value)
        flag = true;
    
);
console.log(flag);

对不起,我错过了什么

【问题讨论】:

你想做什么..? 因为最后一个元素再次成为false 'VALUE' === 'NOVALUE' 如果你想检查一个数组是否有值,你可以使用indexOf 当您找到匹配项时,您需要 break 退出该循环。不幸的是,angular.forEach 中没有破坏机制:***.com/questions/13843972/angular-js-break-foreach 【参考方案1】:

您应该使用 .indexOf(),正如 Alexander 所演示的那样:

var list = ['NOVALUE','VALUE','NOVALUE'];

var flag = list.indexOf('VALUE') !== -1;

console.log(flag);    

或者.some()在更一般的情况下:

var list = ['NOVALUE','VALUE','NOVALUE'];

var flag = list.some(function (value) 
    return value === 'VALUE';
);

console.log(flag);

【讨论】:

【参考方案2】:
var list = ['NOVALUE','VALUE','NOVALUE'];
var flag = false;
angular.forEach(list, function(value)
    if (value === 'VALUE')
        flag = true;
    
    else
        flag = false;
    
    console.log(flag);
);

//false, true, false

【讨论】:

如果你能解释它们为什么\如何工作,答案会更好【参考方案3】:

使用中断;这样当真正的语句出现时,它就会跳出循环

var list = ['NOVALUE','VALUE','NOVALUE'];
        var flag = false;
        for(var i=0;i<list.length;i++)
        if('VALUE' === value)
         
          flag=true;                
          break;
          else
          flag=false;
        
        console.log(flag);

【讨论】:

【参考方案4】:

因为列表中的最后一个值是“NOVALUE”所以它总是假的。 你可以这样做

flag = list.indexOf('VALUE') > -1

【讨论】:

以上是关于带有 angular.forEach 的简单异步代码的主要内容,如果未能解决你的问题,请参考以下文章

angular.forEach 和对象

Async/await:让异步编程更简单

使 angular.forEach 在转到下一个对象后等待承诺

Angular.forEach用法总结

Angular forEach 等到所有承诺都完成?

RocketMQ源码-同步和异步刷盘