Node.js中回调/Promise使用疑问:getid返回undefined如何解决?
问题分析与解决方案
你的问题和Node.js异步特性无关,根本原因是forEach的回调函数里的return无法让外层的getid方法返回值——forEach的回调里的return只会终止当前迭代,不会把值传递给外层函数,所以getid方法没有任何有效返回语句,自然返回undefined。
修复方法
方法1:用普通for循环替代forEach
修改Class.js里的getid方法,直接通过for循环实现查找并返回索引:
class clients{ constructor(){ this.WebSocket = []; } add(ws){ this.WebSocket.push(ws); return this.WebSocket.length-1; } getid(ws){ for(let i=0; i<this.WebSocket.length; i++){ if(ws == this.WebSocket[i]){ console.log("true"); console.log(i); return i; } } // 未找到匹配项时返回-1(可根据需求调整默认值) return -1; } }
方法2:用findIndex方法(更简洁)
利用数组原生的findIndex方法直接获取匹配元素的索引,找不到时返回-1:
class clients{ constructor(){ this.WebSocket = []; } add(ws){ this.WebSocket.push(ws); return this.WebSocket.length-1; } getid(ws){ const index = this.WebSocket.findIndex(element => element === ws); if(index !== -1){ console.log("true"); console.log(index); } return index; } }
关于Promise和回调的疑问
这里完全不需要使用Promise或回调,因为整个查找操作是同步的,没有任何异步I/O或延迟逻辑。只有当函数内部包含异步操作(比如文件读取、网络请求)时,才需要用Promise或回调来处理异步结果。
内容的提问来源于stack exchange,提问作者MoonEater916
相关产品推荐
相关产品推荐

