我目前正在使用括号文本编辑器扩展程序,它可以将您的工作时间保存在数据库中,并允许您查看时间条目。我正在使用NodeJS与SQL服务器进行交互。我已经能够按照自己的意愿输入时间,并且已成功使用select语句调用条目。但是,我试图在括号底部的面板上显示结果。
我无法弄清楚如何将select语句的结果传递给更广泛的范围,以便将其传递给main.js.我是Node的新手,已经阅读了很多关于回调和承诺的内容,但似乎没有任何帮助。我尝试使用回调但我无法从回调中获取值等于可以返回的变量。
更新:viewTime()函数作为promise返回给main.js。如果我可以将con.connect()命名为常规函数,那么我可以通过registerCommand(命令处理函数)在main.js中调用它。
这是代码:`
(function () {
"use strict";
var mysql = require('mysql');
/**
* @private
*
* @return {array}
*/
function viewTime() {
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "brackets_timer_data"
});
con.connect(function(err) {
if (err) {
console.log(err);
} else {
console.log("Connected!");
}
con.query("SELECT * FROM work_sessions", function (err, result, fields) {
if (err) {
console.log(err);
}
//I need to get the result from here
});
});
//And return it here so I can pass the variable to main.js
}
/**
* Initializes the test domain with several test commands.
* @param {DomainManager} domainManager The DomainManager for the server
*/
function init(domainManager) {
if (!domainManager.hasDomain("view")) {
domainManager.registerDomain("view", {major: 0, minor: 1});
}
domainManager.registerCommand(
"view", // domain name
"viewTime", // command name
viewTime, // command handler function
false, // this command is synchronous in Node
"Returns time entry results.",
[{}],
[{name: "results", // return values
type: "array",
description: "Time entry results"}]
);
}
exports.init = init;
}());
`有什么想法吗?
答案 0 :(得分:0)
您可以使用Promise
和async/await
返回会话详细信息。首先,您需要链接Promise
然后返回会话详细信息。 main.js
中的调用函数应该是async
来读取承诺函数的返回值。
对代码进行更改
"use strict";
let mysql = require('mysql');
function viewTime() {
let con = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "brackets_timer_data"
});
return new Promise((resolve, reject) => {
con.connect(function (err) {
if (err) {
console.log('err while establishing connection ', err);
reject(err);
}
console.log('Connected!');
resolve();
});
}).then(() => {
con.query("SELECT * FROM work_sessions", function (err, result, fields) {
if (err) {
console.log('err in while fetching session details ', err);
return Promise.reject(err);
}
return Promise.resolve(result);
});
});
}
function init(domainManager) {
// your other code
viewTime().then(sessions => {
domainManager.registerCommand(
"view", // domain name
"viewTime", // command name
sessions, // command handler function
false, // this command is synchronous in Node
"Returns time entry results.",
[{}],
[{
name: "results", // return values
type: "array",
description: "Time entry results"
}]
);
}).catch(err => {
console.log('err in init()', err);
});
}
exports.init = init;