Javascript 如何在JS和Node JS中使用promise
我已将sql server数据库连接到我的nodejs应用程序,如下所示:Javascript 如何在JS和Node JS中使用promise,javascript,node.js,Javascript,Node.js,我已将sql server数据库连接到我的nodejs应用程序,如下所示: const promise = dao.connect(); promise.then(dao.getDataLastHour()); DAO.js const sql = require('mssql') class DAO { constructor() { this.sqlConfig = {user: 'connexionMartin', password: 'InfoMartin',
const promise = dao.connect();
promise.then(dao.getDataLastHour());
DAO.js
const sql = require('mssql')
class DAO {
constructor() {
this.sqlConfig = {user: 'connexionMartin', password: 'InfoMartin', server: '192.168.102.232\\SQLEXPRESS', database: 'PROFACE'}
}
async connect() {
try {
console.log("Connecting database.....");
let pool = await sql.connect(this.sqlConfig);
if (pool)
console.log("Database connected");
} catch (err) {
console.log(err);
}
}
async getDataLastHour() {
try {
let result = await sql.query('SELECT * FROM PROFACE.dbo.SuiviProduction WHERE Time_Stamp >= DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0) AND DATEPART(HOUR,Time_Stamp) = DATEPART(HOUR,GETDATE())-1');
console.dir(result);
} catch (err) {
console.log(err);
}
}
}
app.js
const Server = require('./server/Server');
const DAO = require('./server/DAO');
const express = require('express');
const server = new Server();
const dao = new DAO();
server.start();
dao.connect();
现在我想使用app.js中的dao.getDataLastHour()
请求我的数据库,但该函数是在应用程序连接到数据库之前执行的。我尝试使用promise来解决此问题,如下所示:
const promise = dao.connect();
promise.then(dao.getDataLastHour());
但它似乎不起作用
也许我没有正确地使用Promise。要使用then-in-your函数,它需要返回任何结果并将其转换为Promise,或者不使用wait,可能它会起作用
async connect() {
console.log("Connecting database.....");
sql.connect(this.sqlConfig).then(pool => {
if (pool)
console.log("Database connected");
}).catch (err{
console.log(err);
});
}
对不起,身份证不好 您的方法:dao.connect()不返回承诺。
因此,第一件事是更改该方法以返回一个承诺,然后您可以听取该承诺,然后决定是否运行查询:
...
connect() {
return new Promise((resolve, reject) => {
try {
console.log("Connecting database.....");
let pool = sql.connect(this.sqlConfig);
if (pool)
console.log("Database connected");
resolve("Success");
} catch (err) {
console.log(err);
reject(err);
}
});
}
...
然后按如下方式调用连接方法:
dao.connect().then(
success => { ... }, // you can continue querying
error => { ... } // something went wrong
);
另外,请尝试在此处阅读一些关于如何使用承诺的内容:
promise和async之间的区别:您可以尝试以下方法:
connect() {
return new Promise((resolve, reject) => {
let pool = sql.connect(this.sqlConfig, function(err) {
if(!err) {
resolve();
}
else {
reject();
}
});
});
}
dao.connect().then(<<call function here>>)
connect(){
返回新承诺((解决、拒绝)=>{
让pool=sql.connect(this.sqlConfig,函数(err){
如果(!err){
解决();
}
否则{
拒绝();
}
});
});
}
dao.connect().then()
connect()
方法不会返回一个Promise
如果您使用的是wait,则不必使用then。在这种情况下,如果sql.connect正在重新执行一个承诺,您可以返回该承诺并使用then执行回调,也可以使用WAIT调用connect并返回。您可以检查数据库连接是否成功吗?@Arun Selin我使用的是WAIT but dao.getDataLastHour()在连接数据库之前执行…@Arun Selin yes连接成功!我尝试了这个方法,但它无论如何都不起作用。SyntaxError:await仅在异步函数中有效。
@missnacki这是一个输入错误。您可以在不等待的情况下调用它。是的,但我有一个错误:ConnectionError:连接已关闭。
,但没有消息表明数据库已像以前一样连接。@misskacki sql.connect接受回调函数。所以你可以把承诺变成承诺callback@Node_Ninja你是什么意思?我试过了,但它无论如何都不起作用SyntaxError:await只在async中有效function@MissKnacki我修改了我的答案。已从代码中删除Wait。我有一个错误:ConnectionError:连接已关闭,但没有像以前那样连接数据库的消息