JavaScript:触发Promise的resolve后如何终止find5函数并退出?
解决find5函数找到元素后立即终止的问题
核心问题在于forEach的设计限制:它的回调里用return只能跳出当前迭代,没法终止整个循环,所以哪怕你调用了resolve(true),后续元素还是会被遍历输出。
要实现找到元素5后立刻终止整个函数,你得把forEach换成支持中断的循环结构,比如for...of或者普通for循环,具体代码如下:
方案1:用for...of循环
function find5(arr) { return new Promise((resolve) => { for (const num of arr) { console.log(num); if (num === 5) { resolve(true); break; // 终止循环,函数不再执行后续逻辑 } } }); }
方案2:用普通for循环
function find5(arr) { return new Promise((resolve) => { for (let i = 0; i < arr.length; i++) { const num = arr[i]; console.log(num); if (num === 5) { resolve(true); break; // 中断循环,直接停止函数执行 } } }); }
测试调用find5([1,2,3,4,5,6,7,8,9,10]),会输出1 2 3 4 5 true,后续的6到10不会再被打印——因为break终止了循环,函数逻辑也随之停止。
内容的提问来源于stack exchange,提问作者Alex Goodie
相关产品推荐
相关产品推荐

