无法返回承诺,然后在数据库调用后使用它
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);
}
})
});
};
我正在学习 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);
}
})
});
};