Ich bekomme diese kryptischen Zeilen hier:
DEBUG: Mongoose verbunden (Knoten:5983) UnhandledPromiseRejectionWarning: Nicht behandelte Ablehnung von Versprechen (Ablehnungs-ID: 1): TypeError: Die Eigenschaft "then" von undefined kann nicht gelesen werden (node: 5983) [DEP0018] DeprecationWarning: Nicht behandelte Versprechensverweigerungen sind veraltet. Versprechen Sie in Zukunft Ablehnungen, die nicht behandelt werden beendet den Node.js-Prozess mit einem Exit-Code ungleich Null.
Wie kann ich nützliche Debugging-Informationen erhalten, so dass ich nicht raten muss, wo genau das Problem liegt?
Ich glaube, es ist irgendwo in dieser Datei:
const mongoose = require("mongoose");
const helper = require("../config/helper");
const schema = require("./Schemas")
mongoose.connect(helper.getMongoose()).then(
() => {
console.log("DEBUG: Mongoose connected")
mongooseConnected();
},
(err) => {
console.log("DEBUG: Mongoose did not connect")
}
);
function mongooseConnected () {
makeSchema( schema.User,
{ id_google: "1",
type: "person",
timestamp: Date.now()
});
}
function makeSchema (Schema, dataObj) {
const Class = mongoose.model("Class", Schema);
const Instance = new Class(dataObj);
Instance.save((err, results)=>{
if (err) {
return console.error(err);
}
}).then(() => {
console.log("Saved Successfully")
});
}
Antworten:
0 für die Antwort № 1In diesem Fall geben Sie einen Rückruf an Ihre Speicherfunktion zurück, damit Mungo keine Zusage zurückgibt:
Instance.save((err, results)=>{
if (err) {
return console.error(err);
}
console.log("Saved Successfully")
})
Wenn Sie weiterhin Promise verwenden möchten, müssen Sie keine Rückruffunktion übergeben:
Instance.save().then(() => {
console.log("Saved Successfully")
}).catch(err => {
return console.error(err);
});
0 für die Antwort № 2
Im Allgemeinen bedeutet eine unbehandelte Promise-Zurückweisung, dass Ihnen eine Fangmethode fehlt, um den Fehler zu beheben .then()
nach der Rückgabe eines Versprechens behandelt nur der Code, wenn es erfolgreich ausgeführt wird, während einschließlich a .catch
Block wird übersprungen .then
und nur laufen .catch
mit dem Fehler als Rückruf, wenn ein Fehler auftritt, während der Code ausgeführt wird, der das Versprechen zurückgibt.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch
myModel.save()
.then(() => {
console.log("Saved");
})
.catch(err => {
console.log(err);
}