js 中如何走完循环之后再进行下一步,业务场景中有个需要循环判断数组中的一个值,完了再进行下一步,我用foreach 中的index 解决了,我这种写法比较low,有没有看着高大尚一点的写法
可以有效利用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{
//不满足条件提示
}