为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 JS 和 Node JS 中使用 Promise

如何在 JS 和 Node JS 中使用 Promise

叮当猫咪 2022-01-07 10:56:41
我已将我的 sql server 数据库连接到我的 nodejs 应用程序,如下所示:DAO.jsconst 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);        }    }}应用程序.jsconst 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();现在我想dao.getDataLastHour()在 app.js 中使用我的数据库来请求我的数据库,但是该函数是在应用程序连接到数据库之前执行的。我试图通过使用 promise 来解决这个问题,如下所示:const promise = dao.connect();promise.then(dao.getDataLastHour());但它似乎不起作用。也许我没有正确使用 Promise。
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

你可以尝试这样的事情:


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>>)


查看完整回答
反对 回复 2022-01-07
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您的方法: 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

);

也尝试在这里阅读一些关于如何使用承诺的信息:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise


查看完整回答
反对 回复 2022-01-07
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

要在你的函数中使用 then ,它需要返回任何结果并将其转换为 promise,或者不使用 await,它可能会工作!


    async connect() {


            console.log("Connecting database.....");

            sql.connect(this.sqlConfig).then(pool => {

              if (pool)

                console.log("Database connected");

            }).catch (err{ 

            console.log(err);

        });

    }


抱歉识别错误!


查看完整回答
反对 回复 2022-01-07
  • 3 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信