You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript添加await后函数仍立即返回未等待查询的原因

问题根因

和await关键字的行为没关系,你踩了两个非常基础的JS异步函数坑:

  • add_user里你只await了内部包的那层自执行异步函数,但是没把这个函数返回的row.id作为add_user自己的返回值。所有async函数只要没写显式return,默认返回的Promise resolve出来的值就是undefined——你确实在内部拿到了正确的id,但这个值被你困在自执行函数的作用域里没抛出来,外层当然拿不到。
  • add函数里你调用的是add_value,和你定义的add_user函数名对不上,属于笔误,运行时会直接触发函数未定义的报错。
  • 顺便提一句:你直接把参数拼到SQL字符串里的写法有SQL注入风险,别这么写,用参数化查询。
修正代码

你包的那层自执行异步函数完全是多余的,直接写逻辑就行,修正后代码如下:

'use strict';

import sqlite3 from 'sqlite3'
import { open } from 'sqlite';

async function add_user(value) {
   const db = await open({
      filename: dbFile,
      driver: sqlite3.Database
   })
   // 参数化查询,?是占位符,驱动会自动转义传入的value
   const row = await db.get(`SELECT id FROM Users WHERE name LIKE ?`, value)
   console.log(row.id)
   return row.id
}

async function add(req, res) {
    // 修正函数名笔误
    const id = await add_user(req.body.value)
    console.log(id)
}

要是你硬要保留原来那层自执行函数的写法,记得在await前面加return,也就是写成return await (async () => { ... })(),但这种纯冗余的写法除了增加漏return的出错概率,没有任何实际作用。


内容的提问来源于stack exchange,提问作者devops1221

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:06:32