无法返回承诺,然后在数据库调用后使用它

Having trouble returning a promise and then consuming it after a database call

我正在学习 Javascript 并且我正在学习关于 Promises 的部分。 因此决定尝试将我早期的一些项目转换为使用 Promises。 但我无法理解它。我阅读了很多指南并浏览了这个网站,但我仍然不明白为什么这不起作用。

这是我正在使用的函数,试图执行一个数据库调用,returns 一个承诺,然后可以记录下来或其他任何东西。

const getID = function (product) {
  let query = `select typeID from invTypes where UPPER(typeName) =UPPER('${product}')`;
  return new Promise((resolve, reject) => {
    resolve(
      DB.get(query, function (err, result) {
        if (err) {
          Bot.say(`Error looking up ${product}`);
        } else {
          console.log(result.typeID); //587
          return result.typeID;
        }
      })
    );
  });
};

getID(product).then((data) => console.log(data)); //Database {}

控制台输出

Database {}
587

所以 .then(data => console.log(data)) //Database {} 还在 promise 返回之前发生,

如您所见,函数之前的其他日志实际上是在它之后记录的。

谁能帮我解决这个 iv 现在已经在这个功能上待了几个小时了哈哈。我想我有一些根本性的误解,我没有从我的训练营视频或我阅读的任何东西中汲取灵感。

在 promise 代码中,您在异步函数的回调函数中使用 resolve() 到 return 个值。

const getID = function(product) {
  let query = `select typeID from invTypes where UPPER(typeName) =UPPER('${product}')`;
  return new Promise((resolve, reject) => {
    DB.get(query, function(err, result) {
      if (err) {
        Bot.say(`Error looking up ${product}`);
        reject(`Error looking up ${product}`);
      } else {
        console.log(result.typeID); //587
        resolve(result.typeID);
      }
    })
  });
};