JavaScript承诺不返回数据
我正在尝试为此创建一个包装器,以便可以执行同步查询。我正在使用承诺,由于某种原因,当我执行JavaScript承诺不返回数据,javascript,node.js,Javascript,Node.js,我正在尝试为此创建一个包装器,以便可以执行同步查询。我正在使用承诺,由于某种原因,当我执行console.log()(请参阅代码)时,我得到了{} 使用承诺: require("./mysql.js"); // Create connection var conn = ....; // Make query var rows = conn.query("select * from groups"); // Dump the results console.log(rows); 现在,如果我
console.log()
(请参阅代码)时,我得到了{}
使用承诺:
require("./mysql.js");
// Create connection
var conn = ....;
// Make query
var rows = conn.query("select * from groups");
// Dump the results
console.log(rows);
现在,如果我从等式中取出包装器,按照它们显示的方式进行,我会得到结果:
require("mysql");
// Create connection
var conn = ....;
// Make query
var rows = conn.query("select * from groups", function(err, rows){
// Dump the results
console.log(rows);
});
那么,我是否正确使用了
承诺?您第一次尝试转储结果实际上是转储承诺本身,而不是值:console.log(行)代码>
在不知道您正在使用哪个Promise库的情况下,您可以执行以下操作:
var conn;
exports.connect = function(params){
conn = myq.createConnection(params);
return this;
};
exports.query = function(sql, values) {
return new Promise(function(resolve, reject) {
if (typeof values !== "undefined") {
// not sure if you want to resolve or reject here
resolve(undefined);
}
conn.query(sql, function(err, r) {
if (err) {
reject(r);
} else {
resolve(r);
}
});
});
};
然后使用返回的承诺:
// Make query
var promise = conn.query("select * from groups");
// Dump the results
promise.then(function(results) {
console.log(results);
}, function(err) {
console.log(results);
});
现在最好的选择是使用async/await IMO:
const myFunction = async () => {
try {
const myPromise = await fetch( fetchParams, fetchObj );
const anotherPromise = await myPromise.json();
//etc...
}
catch(err){
console.log(err);
}
}
不;您在创建后立即将其记录下来。一个教程可能是个好主意。我正要开始这样做:第一件事是:承诺不会使代码同步,它们只是处理异步流的一种不同方式。如果它在回调中正常工作,那么我建议conn.query
不是您认为的方法。最后,如果看不到您是如何创建连接的,我们就无法知道conn
对象实际上是什么。您可以更新这个问题吗?您应该尝试类似conn.query(“select*from groups”)。然后(function(ans){rows=ans;})好的,但您只创建承诺。底部的示例显示它正在解析,具体地说,就是承诺创建下面的then
调用。我推荐一个教程,不仅仅是带示例的API文档。这很有效,但它并不是我认为它应该做的。我想我需要做点什么,然后yield
以获得conn.query()
以同步/过程方式返回结果。如果你有任何想法如何使这个同步而不是异步,请让我知道!谢谢你的回答!我不明白你为什么要使这个同步,因为这将是阻塞行为。这样做会破坏使用node的一个主要优势,因为我不想要嵌套查询
const myFunction = async () => {
try {
const myPromise = await fetch( fetchParams, fetchObj );
const anotherPromise = await myPromise.json();
//etc...
}
catch(err){
console.log(err);
}
}