猿问

如何在 JS 和 Node JS 中使用 Promise

我已将我的 sql server 数据库连接到我的 nodejs 应用程序,如下所示:


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

        }

    }

}

应用程序.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();

现在我想dao.getDataLastHour()在 app.js 中使用我的数据库来请求我的数据库,但是该函数是在应用程序连接到数据库之前执行的。我试图通过使用 promise 来解决这个问题,如下所示:


const promise = dao.connect();

promise.then(dao.getDataLastHour());

但它似乎不起作用。


也许我没有正确使用 Promise。


叮当猫咪
浏览 143回答 3
3回答

哔哔one

你可以尝试这样的事情:connect() {&nbsp;return new Promise((resolve, reject) => {&nbsp; &nbsp; &nbsp; &nbsp; let pool = sql.connect(this.sqlConfig, function(err) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!err) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resolve();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reject();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp;});}&nbsp;dao.connect().then(<<call function here>>)

开心每一天1111

您的方法: dao.connect() 不返回承诺。因此,第一件事是更改该方法以返回一个承诺,然后您可以收听该承诺,然后决定是否运行查询。:...connect() {&nbsp; &nbsp; &nbsp;return new Promise((resolve, reject) => {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log("Connecting database.....");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let pool = sql.connect(this.sqlConfig);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pool)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log("Database connected");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resolve("Success");&nbsp; &nbsp; &nbsp; &nbsp; } catch (err) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(err);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reject(err);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp;});}...然后像这样调用你的连接方法:dao.connect().then(&nbsp; &nbsp; success => { ... }, // you can continue querying&nbsp;&nbsp; &nbsp; error => { ... } // something went wrong);也尝试在这里阅读一些关于如何使用承诺的信息:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

杨__羊羊

要在你的函数中使用 then ,它需要返回任何结果并将其转换为 promise,或者不使用 await,它可能会工作!&nbsp; &nbsp; async connect() {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log("Connecting database.....");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sql.connect(this.sqlConfig).then(pool => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (pool)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log("Database connected");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }).catch (err{&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; console.log(err);&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; }抱歉识别错误!
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答