gpt4 book ai didi

node.js - NodeJS Promises - "Then"未调用

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:18 25 4
gpt4 key购买 nike

我是 NodeJS 新手,花了几个小时尝试了解 Promise 到底是如何工作的,但看似简单的事情仍然行不通。

我正在尝试对数据库进行几次调用,所有这些调用完成后,再执行其他操作。我现在拥有的是以下代码,但没有调用任何 then 函数。

var queries = ['SELECT value FROM tag', 'SELECT url FROM download_link'];
console.log("Starting promises");
var allPromise = Promise.all([queryDatabaseAddToResult(connection, queries[0], result), queryDatabaseAddToResult(connection, queries[1], result)]);
allPromise.then(
function(result) {
console.log("1"); // Does not show up
}, function(err) {
console.log("2"); // Does not show up either
}
);

function queryDatabaseAddToResult(connection, query, result) {
return new Promise(function(resolve, reject) {
connection.query(query, function(err, rows, fields) {
if (err) {
console.log(err);
Promise.reject(err);
}
console.log(rows);
result.tags = JSON.stringify(rows);
Promise.resolve(result);
});
})

}

当记录行显示在日志中时,确实会调用数据库。

最佳答案

问题是您没有调用正确的 resolvereject 函数。应该是:

function queryDatabaseAddToResult(connection, query, result) {
return new Promise(function(resolve, reject) {
connection.query(query, function(err, rows, fields) {
if (err) {
console.log(err);
reject(err);
} else {
console.log(rows);
result.tags = JSON.stringify(rows);
resolve(result);
}
});
})

请注意,resolvereject 调用不应位于 Promise. 范围内。并且您应该使用 else 来避免在调用 reject 后调用 resolve

关于node.js - NodeJS Promises - "Then"未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39180399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com