美文网首页Node.jsWeb前端之路node.js
nodejs查询数据库后将值返回前端

nodejs查询数据库后将值返回前端

作者: 关玮琳linSir | 来源:发表于2017-03-03 14:32 被阅读3585次

    nodejs最大的优势也是大家用着最为难以理解的一点,就是它的异步功能,它几乎所有的io操作都是异步的,这也就导致很多人不理解也用不习惯。

    前几天在项目中遇到这样一个问题,就是前端触发某个请求,想要查询数据库并且返回这个值,但是无论如何都返回不回来,因为没等到查询完毕,就过早的将空数据返回回来了,这个困扰了我许久,当时想到一些替代的方法,都是不治本的方法,今天打算用promise重新解决这个问题。

    promise的作用是让原本异步执行的代码变成类似同步执行,就是在执行完之后,会将结果返回回来。当然,我目前也只对promise只有一个浅显的理解,在之后也会深入学习的,下面说一下这个问题是怎么解决的。

    app.use(controller.get('/aaa', function*() {
        this.set('Cache-Control', 'no-cache');
        var data = yield service.bbb();
        this.body = data;
    }));
    

    我们可以使用koa框架中的yield,promise可以作为它的返回参数。

    exports.bbb = function () {
        var promise = new Promise(function (resolve, reject) {
        var mysql = require('mysql');
        var connection = mysql.createConnection({
            host: '127.0.0.1',
            user: 'root',
            password: 'root',
            port: '3306',
            database: 'db_biology'
        });
        connection.connect();
        connection.query(
            "SELECT * FROM Sheet1",
            function selectCb(err, results) {
                if (results) {
                    console.log(results);
                    //resolve(results);
                    resolve(results);
                }
                if (err) {
                    console.log(err);
                }
                connection.end();
            }
        );
    });
    promise.then(function (value) {
        console.log(value);
        return value;
        // success
    }, function (value) {
        // failure
    });
    return promise;
    };
    

    只需要利用promise就可以实现我们以前直接return的结果了,这样就优雅的将异步代码变成了同步的了~

    相关文章

      网友评论

      • 氕氘氚_5ed7:谢谢楼主,困扰了我好几天的问题终于解决了,专门注册账号,感谢楼主
        关玮琳linSir:没事没事,都是从这个 阶段过来的。
      • 小鱼吐泡沫o0OOO:我登陆上来,就是为了给你点个赞,谢谢
        关玮琳linSir:@小鱼吐泡沫o0OOO 谢谢,谢谢
      • 我就是L:promise还是异步啊,只是吧callback改成了then。完全同步的话可以看看node7中的async await
        关玮琳linSir:@我就是L 好的,非常感谢,我去了解一下

      本文标题:nodejs查询数据库后将值返回前端

      本文链接:https://www.haomeiwen.com/subject/uixrgttx.html