问题描述
我在一个文件中的代码是下面这样的
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看看吧
问题解答
回答1:谢邀。
经典异步。
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); }}); }); });};回答2:
使用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);});回答3:
Promise.coroutine(function* () { yield Promise.delay(500) console.log(’after first delay’) yield Promise.delay(1000) console.log(’延迟几秒后’) })()
Promise.coroutine由bluebired提供,类似库有tj的co
回答4:回调方式:
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})