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

求助:异步函数返回undefined,如何实现Promise正确传值?

解决你的Promise异步函数返回undefined问题

我来帮你一步步修复这段代码,问题主要出在两个核心点,还有一个必须注意的安全隐患:

1. 函数未返回Promise实例

你在函数内部创建了promise1,但没有把它返回出去——这就是调用maFonctionAsynchrone()得到undefined的直接原因。首先给函数加上返回语句:

function maFonctionAsynchrone(pseudo) { 
  var promise1 = new Promise(function(resolve, reject) { 
    connection.query("SELECT * FROM users WHERE MATCH (username) AGAINST ('" + pseudo + "')", function (error, results, fields) { 
      if (!!error) { 
        console.log('erreur'); 
        reject(error) 
      } else { 
        resolve(results); // 这里不需要return results,resolve已经把结果传递给Promise的后续处理了
      } 
    }); 
  }); 
  return promise1; // 关键:返回创建的Promise对象
}

2. 正确处理异步结果

Promise是异步执行的,直接console.log(maFonctionAsynchrone('pseudotest'))打印的是Promise实例本身,而非查询结果。你需要用以下两种方式之一获取异步结果:

方法一:使用.then()链式调用

app.post('/sendnewpost', function(req, res){ 
  maFonctionAsynchrone('pseudotest')
    .then(results => {
      console.log(results); // 这里才能拿到实际的数据库查询结果
      // 可以在这里给客户端返回响应,比如 res.json(results)
    })
    .catch(error => {
      console.error('查询出错:', error);
      res.status(500).send('查询失败');
    });
});

方法二:使用async/await语法(更简洁直观)

把路由处理函数改成async函数,用await等待Promise完成:

app.post('/sendnewpost', async function(req, res){ 
  try {
    const results = await maFonctionAsynchrone('pseudotest');
    console.log(results);
    res.json(results);
  } catch (error) {
    console.error('查询出错:', error);
    res.status(500).send('查询失败');
  }
});

3. 重要安全提醒:避免SQL注入

你现在直接把pseudo拼接到SQL语句里,这会导致严重的SQL注入漏洞。一定要用参数化查询来修复,具体写法取决于你使用的数据库驱动(比如mysql/mysql2),示例如下:

// 修改maFonctionAsynchrone中的query调用
connection.query(
  "SELECT * FROM users WHERE MATCH (username) AGAINST (?)",
  [pseudo], // 将参数放在数组中,驱动会自动处理转义,避免注入
  function (error, results, fields) { 
    if (!!error) { 
      console.log('erreur'); 
      reject(error) 
    } else { 
      resolve(results);
    } 
  }
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:40