function step() { var start = async () =>{ // 在这里使用起来就像同步代码那样直观
var newsData=await db.query('SELECT id from topline WHERE newsNumber =55',function(err,rows){
if(!err){
return rows;
}
});
console.log('开始了!');
await db.query('SELECT id from topline WHERE newsNumber =55',function(err,rows){
if(!err){console.log(rows)}
});
console.log('这里我想拿到数据库返回的值:'+newsData);
};
start()
}
//db.query的代码 var mysql = require(‘mysql’); var pool = mysql.createPool({ host: ‘localhost’, user: ‘root’, password: ‘’, database: ‘test’, port: ‘3306’ });
function query(sql, callback) { return new Promise((resolve, reject) => { pool.getConnection(function(err, connection) { // Use the connection connection.query(sql, function(err1, rows) { callback(err1,rows); resolve(); connection.release(); //释放链接 }); }); })
}
exports.query = query;
问题:我就是想拿到第一次打开数据库返回的值.这里拿不到了...他返回的是undefined
你的query方法返回的Promise实例里面resolve(),当然是undefined了。。。
if(err){
return reject(err)
}
resolve(rows)
这样才会有值,还有你在Promise里面写callback是干啥,下面那段代码完全看不懂是想干嘛,await后面跟了cb。。。
var spiderSina = async() => { // 使用同步 var userListCode = await spidersSync.spider("http://finance.sina.com.cn/", "utf-8"); var newsList = userListCode.match(/<div class="BigPic" id="BigPic_1">[\s\S].+?</div>/)[0].match(/http[^"]+shtml/g); var newsCode,newsTitle,newsContent,newsURI;//新闻源码 if(newsList.length != 0) {
newsList.forEach(function(vUrl, i) {
newsCode = await spidersSync.spider(vUrl, "utf-8");
newsTitle = /<title>(.+?)(?:_|\|).+?<\/title>/gi.exec(newsCode)[1]
newsContent = /<div class="article article_16" id="artibody">([\s\S]+)(?:<!--[\s]+原始正文end)/gi.exec(newsCode)[1].replace(/<.[^>]*>/g, '').replace(/^(.+)([。|"|\.|\S])\s/g, '<p>1ドル2ドル</p>').replace(/([。|"])+([ ]{2,})/g, '1ドル</p><p> ').replace(/(^[ ]{2,})|([^>])([ ]{2,})/g, '2ドル</p><p> ').replace(/^(<\/p>)([\s\S]+)$/g, '2ドル</p>')
newsURI = "keji/" + nowGetDate() + "/" + (Math.floor(Math.random() * 900) + 100) + String(+new Date()).substr(8, 5) + ".html";
})
}
}
我把代码修改了一下,,为什么现在newsCode = await spidersSync.spider(vUrl, "utf-8"); 这一句报错呢? 我用了一个循环就不行了!!!!你需要把基于 callback 的异步 api, 封装成 promise, 可以用这个试试 https://github.com/vincentLiuxiang/gen-async-promise