Ich bin ziemlich neu mit der Verwendung von Bluebird verspricht. Ich habe versucht, sie über einen Emitter zu verwenden. Ich bin jedoch fest, wie mit Fehlern umzugehen ist.Bluebird Promises mit Event Emitter
Ich habe ein stream
Objekt, das der Emitter ist. Code ist wie unten -
return new Promise((resolve, reject) => {
var onDocFunc = doc => {
//JSON.parse('*');
// some logic goes in here to construct setStmt
bulk.find(query).upsert().update({$set: setStmt});
count++;
if (count % bulkSize == 0) {
stream.pause();
var execute = Promise.promisify(bulk.execute);
execute().catch(() => {}).then(() => {
stream.resume();
});
}
};
stream.on('data', onDocFunc);
stream.on('end',() => {
JSON.parse('*'); // how to catch errors that happen here??
var boundResolve = resolve.bind(this, {count: count});
if (count % bulkSize != 0) {
Promise.promisify(bulk.execute)().then(boundResolve).catch(boundResolve);
}
else {
boundResolve();
}
});
stream.on('error', err => {
reject(err);
});
})
Ich möchte wissen, was der empfohlene Weg ist, einen Fehler zu fangen, die innerhalb der Rückruf des end
Ereignishandler auftritt? Gerade jetzt, wenn ein Fehler auftritt, werden die NodeJS Anwendung abstürzt mit uncaughtException: Unexpected token *
Das sieht ordentlich aus. Danke für die Einblicke. Behalte dies im Hinterkopf. – hyades
Wenn ich Ausnahmen wie die 'JSON.parse' in' onDocFunc' behandeln muss, was soll ich tun? – hyades
Gehen Sie zu 'try'-' catch' Blöcken, obwohl ich nicht davon überzeugt bin, dass Sie tatsächlich die 'JSON.parse' darin brauchen. Wenn Sie den gesamten Code dessen, was Sie tatsächlich in Ihrer Frage tun, veröffentlichen können, kann ich meine Antwort aktualisieren. – Bergi