3
刚开始使用node.js时,有一些JavaScript经验,但在服务器端很少。Node.js + Mongoose ...控制流问题?
我有下面的代码和我正在寻找的功能太添加产品到使用Mongoose的集合,但是,如果使用'名称'找到重复,然后将产品作为嵌入式文档推送到重复,只有选择信息,如product_ids,包信息等。我假设这个问题与findOne在第一次运行时没有找到任何重复项有关。如果我再次运行它,它会检测到重复项,但到时候就太迟了。我不知道如何让findOne在上一次“保存”发生之后才能运行。
function insertProduct(data) {
var product;
Product.findOne({
name: data.name
}, function(err, doc) {
if (err) throw err;
if (!doc) {
product = new Product({
name: data.name
//other product data
});
product.packages.push({
//package data
});
}
else if (doc) {
doc.packages.push({
//package data
});
product = doc;
}
product.save(function(err) {
if (err) throw err;
console.log('Added: ' + product.name);
});
});
}
request(url, function(error, response, body) {
if (!error && response.statusCode === 200) {
jsonResult = JSON.parse(body);
jsonResult.result.forEach(insertProduct);
}
});
我意识到这必须是控制流的问题,我仍然试图抓住。感谢您的帮助!
绝对是一个更合乎逻辑的方法,但它似乎没有办法。 Product.findOne只在第二次运行应用程序时发现重复。在第一次运行时,从一个空集合开始,由于某种原因它没有看到任何新创建的文档,所以它找不到重复。任何其他想法?再次感谢! – dnglbr 2012-03-02 16:09:37