JS函数返回值有效却返回undefined问题求助
问题原因
sqlite3的db.all是异步回调API,你的getNotParsedArticle函数本身没有返回任何值,所以调用后直接输出undefined。- 回调函数里的
return只作用于回调内部,不会把结果传递给外层函数。数据库查询是异步执行的,所以会先打印undefined,等查询完成后才打印拿到的文章链接。
解决方案
把异步操作封装成Promise,再通过async/await或者.then()获取结果:
第一步:封装Promise版本的函数
function getNotParsedArticle() { return new Promise((resolve, reject) => { db.all('SELECT article_link FROM helpdb WHERE done = 0 LIMIT 1', (err, result) => { if (err) { console.log(err.message); reject(err); return; } // 处理查询结果为空的情况 if (!result || result.length === 0) { resolve(null); return; } const articleLink = result[0].article_link; console.log("Got not parsed article: " + articleLink); resolve(articleLink); }); }); }
第二步:正确调用函数
方式1:用async/await(需要在async函数内执行)
async function fetchArticle() { try { const link = await getNotParsedArticle(); console.log(link); } catch (err) { // 处理错误 } } fetchArticle();
方式2:用.then().catch()
getNotParsedArticle() .then(link => console.log(link)) .catch(err => console.error(err));
注:你之前只给函数加
async但没用await等待异步操作完成,所以还是会直接返回undefined,必须配合Promise和await才能拿到正确结果。
内容的提问来源于stack exchange,提问作者ezburbon
相关产品推荐
相关产品推荐

