js 中如何走完循环之后再进行下一步

js 中如何走完循环之后再进行下一步,业务场景中有个需要循环判断数组中的一个值,完了再进行下一步,我用foreach 中的index 解决了,我这种写法比较low,有没有看着高大尚一点的写法

img

可以有效利用js中数组自带的some函数

const selectionList = [
   { 'assignmentAmount': 10 },
   { 'assignmentAmount': 5 },
   { 'assignmentAmount': 2 },
   { 'assignmentAmount': -3 }
]

const flag = selectionList.some((item) => item.assignmentAmount < 0)
if (flag) { // 存在assignmentAmount小于0的元素
    // ...相关提示
    return
}
// ... 继续执行下面代码
console.log('start');
setTimeout(function() {
  console.log('setTimeout');
}, 0);
Promise.resolve().then(function() {
  console.log('promise1');
}).then(function() {
  console.log('promise2');
});
console.log('end');

首先,全局代码(main())压入调用栈执行,打印start;

接下来setTimeout压入macrotask队列,promsie.then回调放入microtask队列,最后执行console.log('end'),打印出end;

至此,调用栈中的代码被执行完成,回顾macrotask的定义,我们知道全局代码属于macrotask,macrotask执行完,那接下来就是执行microtask队列的任务了,执行promise回调打印promise1;

promsie回调函数默认返回undefined,promise状态变为fullfill触发接下来的then回调,继续压入microtask队列,event loop会把当前的microtask队列一直执行完,此时执行第二个promise.then 回调打印出promise2;

这是microtask队列已经为空,从上面的流程图可以知道,接下来主线程会去做一些UI渲染工作(不一定会做),然后开始下一轮event loop,执行setTimeout的回调,打印出setTimeout;

这个过程会不断重复,也就是所谓的事件循环。

你这里可以用every或者some来改一下

const arr = [1,2,3,4,5,10];
const every = arr.every(ele=>return ele <  6)
if(every){
   //do next
} else{
 //不满足条件提示
}