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

浏览:22日期:2022-09-28

问题描述

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

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

相关文章: