[英]JavaScript Promise Not Returning Data
我正在嘗試為這個mysql 庫創建一個包裝器,以便我可以進行同步查詢。 我正在使用 Promise,出於某種原因,我在執行console.log()
時得到了{}
(請參閱代碼)。
var myq = require("mysql");
var conn;
exports.connect = function(params){
this.conn = myq.createConnection(params);
return this;
};
exports.query = function(sql, values){
return new Promise(function(resolve, reject){
if(typeof values === "undefined"){
this.conn.query(sql, function(err, r){
if(err){
reject(r);
}else{
resolve(r);
}
});
}
});
};
使用承諾:
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);
});
那么,我是否正確使用了Promise
?
您第一次嘗試轉儲結果實際上是轉儲承諾本身而不是值: console.log(rows);
在不知道您使用的是哪個 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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.