zip habe ich eine Funktion, die einzelne asynchrone Einfügung in db darstellen:Wie mehrere Observablen (1kk) ohne Vorbelegung sie in Array
function insertInDatabaseRx(data) {
return Rx.Observable.create(function (observer) {
db.insert(data, function (err) {
if (err) {
observer.onError(err);
} else {
observer.onCompleted();
}
});
});
}
I Massen Insertion (1kk + mal) und einige Maßnahmen tun müssen nach allem fertig. Meine aktuelle Implementierung:
var someLongArray = ...;
var massInsertion = [];
for (var i = 0; i < someLongArray.length; i++) {
massInsertion.push(insertInDatabaseRx(someLongArray[i].data);
}
Rx.Observable.zip(massInsertion)
.subscribe(
function (x) {
logger.debug('Next: %s', x);
},
function (e) {
logger.error('Error: %s', e);
},
function() {
//all done
logger.info('all save done, terminating ... ');
process.exit();
});
Es gearbeitet, aber ich denke, es Ressource nicht (cpu/mem) effiziente Anordnung von Observablen vorzubelegen:
var massInsertion = [];
for (var i = 0; i < someLongArray.length; i++) {
massInsertion.push(insertInDatabaseRx(someLongArray[i].data);
}
Wie Erfüllung dieser Aufgabe effizienter zu gestalten, ohne Vorbelegung Array von Observablen?
erste, was ich bemerken ist, dass 'insertInDatabaseRx' nicht beobachtbar Vertrag nicht gehorcht. Sie sollten 'onCompleted' nicht ausgeben, nachdem Sie' onError' aufgerufen haben. Ein "else" ist alles was Sie brauchen, um dieses Bit zu reparieren. –
@DaveMoten danke! – zella
Woher kommen 'Daten'? Kommt es von einem Array? Sind Sie sicher, dass Ihre Datenbank keine Masseneinfügung durchführt? – paulpdaniels