今天我用nodejs做一个简单的爬取网页内容,解析,图片下载保存本地,入库的小程序,可是在数据库操作这一块碰到一个问题。程序是循环指定次数爬取一个网页,然后把内容放库,在入库的同时我要判断正在入库的内容是否已经存在,可是这个时候我要进行数据库查询,但怎么查询都查询不到前面循环已经入好库的内容。哪位有这方面的经验。 <pre><code> function main() { var promise = getOrm(); promise .then(function (orm) { for (var i = startId; i <= endId; i++) { start(i, function(json) { var lastIndex = json.analysis.indexOf("。"); var correctAnswer = json.analysis.substring(lastIndex - 1, lastIndex); orm.collections.puzzlecategory.findOneByName(json.type).exec(function (err, puzzleCategoryModel) { if (!puzzleCategoryModel) { var tempPuzzleCategory = {}; tempPuzzleCategory.name = json.type; tempPuzzleCategory.status = 1; orm.collections.puzzlecategory.create(tempPuzzleCategory).exec(function (err, tempPuzzleCategoryModel) { console.log(err); savePuzzle(tempPuzzleCategoryModel.id, correctAnswer, json, orm); }) } else { savePuzzle(puzzleCategoryModel.id, correctAnswer, json, orm); } }) }); } }); } </code></pre> 上面是一段简单的代码,其实很简单,首先是查询数据库,看指定记录是否已经存在,不存在则无进行插入,存在则不入库。
里面也是异步的啊
var files = [];
for (var i = 0; i < 100; ++i) {
files.push(Top.createAsync({"username":"fixture-user-" + i,"address":"password" + i}));
}
Promise.all(files).then(function() {
done();
});
这是bluebird写的一段代码,创建100条记录,成功后调用done方法,你的这个应该和这个类似