搜尋

首頁  >  問答  >  主體

node.js - nodejs怎么在外层拿到回调函数内的变量值

我在一个文件中的代码是下面这样的

 let queryResult =  mysqlClient.searchDBResult();

另外你一个文件中的代码是下面这样的

exports.searchDBResult = () =>{
    let queryString = 'select  * from icafeinfo  order  by userid desc limit 7;';

    mysqlClient.connect(function (){
        mysqlClient.query(querystring, function (err, rows){
            if (err) throw err;
            if(searchResult) {
                //请问这里我怎么row获取的值返回给第一个文件调用的代码呢
                return rows;
            }
        });
    });
};

就是第二段代码我执行了数据库查询操作,怎么把查询结果返回给第一段代码呢?就是
queryResult的值是rows的值。

最好能给个demo看看吧

PHP中文网PHP中文网2781 天前586

全部回覆(4)我來回復

  • 怪我咯

    怪我咯2017-04-17 15:39:37

    謝邀。

    經典非同步。

    1、回調

    mysqlClient.searchDBResult(function(queryResult){
      console.log(queryResult)
    });
    
    exports.searchDBResult = (callback) =>{
        let queryString = 'select  * from icafeinfo  order  by userid desc limit 7;';
    
        mysqlClient.connect(function (){
            mysqlClient.query(querystring, function (err, rows){
                if (err) throw err;
                if(searchResult) {
                    //请问这里我怎么row获取的值返回给第一个文件调用的代码呢
                    callback(rows);
                }
            });
        });
    };

    2.其他形式異步, 以Promise為例

    mysqlClient.searchDBResult().then(function(queryResult){
      console.log(queryResult)
    })
    
    exports.searchDBResult = () =>{
      return new Promise((resolve, reject)=>{
        let queryString = 'select  * from icafeinfo  order  by userid desc limit 7;';
    
        mysqlClient.connect(function (){
            mysqlClient.query(querystring, function (err, rows){
                if (err) reject(err);
                if(searchResult) {
                    //请问这里我怎么row获取的值返回给第一个文件调用的代码呢
                    resolve(rows);
                }
            });
        });
      });
    };

    回覆
    0
  • 阿神

    阿神2017-04-17 15:39:37

    使用co配合promise吧

    co

    exports.searchDBResult* = () =>{
        let queryString = 'select  * from icafeinfo  order  by userid desc limit 7;';
        return new Promise(function(resolve,reject){
            mysqlClient.connect(function (){
            mysqlClient.query(querystring, function (err, rows){
                if (err) return reject(rows);
                if(searchResult) {
                    //请问这里我怎么row获取的值返回给第一个文件调用的代码呢
                    return resolve(rows);
                }
            });
        });
        })
        
    };
    co(function* () {
      var result = yield mysqlClient.searchDBResult();
      return result;
    }).then(function (value) {
      console.log(value);
    }, function (err) {
      console.error(err.stack);
    });

    回覆
    0
  • PHPz

    PHPz2017-04-17 15:39:37

    Promise.coroutine(function* () { 
      yield Promise.delay(500) console.log('after first delay')
      yield Promise.delay(1000) console.log('延迟几秒后') }
    )()

    Promise.coroutine由bluebired提供,類似庫有tj的co

    回覆
    0
  • 黄舟

    黄舟2017-04-17 15:39:37

    回調方式:

    exports.searchDBResult = (cb) =>{
        let queryString = 'select  * from icafeinfo  order  by userid desc limit 7;';
        mysqlClient.connect(function (){
            mysqlClient.query(querystring, function (err, rows){
                if (err) throw err;
                if(searchResult) {
                    //请问这里我怎么row获取的值返回给第一个文件调用的代码呢
                    cb(rows)
                }
            });
        });
    };
    
    mysqlClient.searchDBResult(function(rows) {
        //you can use the result rows in here
    })
    

    回覆
    0
  • 取消回覆