node.js - nodejs怎么在外层拿到回调函数内的变量值
PHP中文网
PHP中文网 2017-04-17 15:37:37
0
4
581

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

 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中文网

认证高级PHP讲师

全部回覆(4)
刘奇

謝邀。

經典非同步。

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);
            }
        });
    });
  });
};
阿神

使用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);
});
PHPzhong
Promise.coroutine(function* () { 
  yield Promise.delay(500) console.log('after first delay')
  yield Promise.delay(1000) console.log('延迟几秒后') }
)()

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

黄舟

回調方式:

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
})
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板