async函数getToken调用返回undefined,无法返回布尔值该如何修复?
问题原因
- 你声明的
async函数外层没有主动返回任何值,then回调内部的return仅作用于回调函数本身,不会传递给外层的getToken函数,因此调用时默认返回undefined async函数本身返回的是Promise对象,无法同步获取内部返回的布尔值,需要配合await或者then读取结果
修复方案
推荐使用async/await的写法,更符合异步函数的编码习惯:
async function getToken(auth) { if (!(auth.startsWith('!t!'))) { auth = "!t!" + auth; } // 等待异步查询结果 const value = await db.get(auth); if (value == "valid") { console.log('Token Accepted'); return true; } else if (auth.slice(3) == process.env['token']) { console.log('Master Token Accepted'); return true; } else { console.log('Token Denied'); return false; } }
如果你习惯用Promise链式调用,也可以直接返回整个Promise链:
async function getToken(auth) { if (!(auth.startsWith('!t!'))) { auth = "!t!" + auth; } // 直接返回Promise实例 return db.get(auth).then(value => { if(value == "valid"){ console.log('Token Accepted'); return true; }else if(auth.slice(3) == process.env['token']){ console.log('Master Token Accepted'); return true; }else{ console.log('Token Denied'); return false; } }); }
调用示例
调用时需要用异步方式读取返回值:
// 方式1:在async函数内用await读取 async function test() { const result = await getToken('测试token'); console.log(result); // 输出true或false } test(); // 方式2:用then回调读取 getToken('测试token').then(result => { console.log(result); // 输出true或false });
内容的提问来源于stack exchange,提问作者CHarlie l
相关产品推荐
相关产品推荐

