【发布时间】:2016-04-17 17:22:00
【问题描述】:
我有一个 setInterval 每秒运行一个 promise,在每个 promise 的 then 函数中,我将输出放入 MongoDB 数据库(尽管由于某种原因它不起作用)。
我想在一切完成后关闭与数据库的连接,但我不知道如何使连接的关闭仅在所有承诺都完成并且所有内容都完成写入数据库时运行。
这是我当前的代码:
我有一个 client.js 文件,用于使用 Promise 向商店发出查询,还有一个 db.js,用于处理 DB 功能。
client.js
var id = setInterval(function(){
if (i == (categories.length-1))
clearInterval(id);
var category = categories[i];
client.itemSearch({
searchIndex: SearchIndex,
categoryID: category.id,
keywords: currentKeyword
})
.then(function(results){
var title = results[0].Title;
var cat = category.name;
var price = results[0].Price
db.insertProduct(title,cat,price).then(function(){
console.log("Added " + title);
})
},function(err) {
console.log("error at " + category.name);
});
i+=1;
}, 1000)
queryStore();
db.js
var mongoose = require("mongoose");
mongoose.connect('mongodb://localhost:27017/catalog');
var schema = new mongoose.Schema({
title : String,
category : String,
price : Number,
}, {collection: "catalog"});
var Product = mongoose.model("Product", schema);
Product.remove({}, function() {
console.log('Database cleared.')
});
exports.clearDB = function() {
Product.remove({});
}
exports.insertProduct = function (Title,Category,Price) {
var entry = new Product({
title: Title,
category: Category,
price: Price,
});
entry.save();
}
exports.closeConn = function() {
console.log("Closing DB Connection");
mongoose.connect().close();
}
另外,由于我对 JavaScript 和 Node.js 完全陌生,任何最佳实践或一般提示都将不胜感激! :)
【问题讨论】:
-
Promise 不是“运行”,它们只是被创建。
-
我真的建议不要将
setInterval与promise 一起使用。 PromisifysetTimeout并且只使用它。 -
@Bergi 你能详细说明一下吗?我不确定我理解这意味着什么
-
如果您参考我的第一条评论,那只是关于术语。承诺是价值,而不是可以执行的东西。
标签: javascript node.js mongodb promise setinterval