Verspricht innerhalb einer setInterval

Habe ich eine setInterval läuft ein Versprechen, jede Sekunde, innerhalb der dann die Funktion jedes Versprechen, ich habe die Ausgabe in eine MongoDB-Datenbank (obwohl aus irgendeinem Grund funktioniert es nicht).

Ich will schließen der Verbindung zur Datenbank, wenn alles fertig ist, aber ich weiß nicht, wie Sie, um das schließen der Verbindung werden nur ausgeführt, wenn alle Versprechungen werden gemacht und alles abgeschlossen hat schriftlich an die DB.

Hier ist mein Derzeitiger code:

Habe ich eine client.js - Datei, gemeint ist die Ausgabe der Abfrage in einem shop mit einem Versprechen, und ein db.js bedeutete zu behandeln, DB-Funktionalität.

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

Auch, da bin ich absolut neu auf JavaScript und Node.js allgemein, best practices oder Allgemeine Tipps werden sehr geschätzt! 🙂

  • Versprechungen werden nicht "ausgeführt", werden Sie nur werden erstellt.
  • Ich wirklich empfehlen, nicht zu verwenden setInterval zusammen mit dem Versprechen. Promisify setTimeout und nur die verwenden.
  • könnten Sie das näher erläutern? Ich bin mir nicht sicher, ob ich verstehe, was das bedeutet
  • Wenn Sie Verweise auf meinen ersten Kommentar, es geht nur um die Terminologie. Versprechungen sind Werte, etwas, das nicht ausgeführt werden kann.
InformationsquelleAutor Daedalus | 2016-01-12
Schreibe einen Kommentar