getAccomodationCost ist eine Funktion, von der erwartet wird, dass sie ein Versprechen mit einem Rückgabewert zurückgibt. Jetzt wirft es einen Fehler, die Auflösung ist nicht definiert.So geben Sie ein Versprechen mit einem Rückgabewert zurück
Diese Fehlermeldung wird bei Zeilenauflösung (JSON.parse (JSON.stringify (Ergebnis))) innerhalb Versprechen dann ausgelöst. Wenn ich das Schlüsselwort resolve mit return ersetze, wird der Promise.all-Aufruf in der Hauptfunktion fehlschlagen.
Kann mir jemand helfen, ein Versprechen mit einem Rückgabewert JSON.parse (JSON.stringify (result)) von der folgenden Funktion zurückzugeben.
var getAccomodationCost = function (req, res) {
var accomodationCostPromise = new Promise(function (resolve, reject)
{
getHospitalStayDuration(req, res, function (duration) {
resolve(duration)
})
})
.then(function (duration) {
hotelModel.aggregate([
//Some logic here
], function (err, result) {
resolve(JSON.parse(JSON.stringify(result)))
})
})
return accomodationCostPromise;
}
//Main function where the above snippet is called
const promise1 = somefunction(req, res);
const accomodationCostPromise = getAccomodationCost(req, res)
Promise.all([promise1,accomodationCostPromise])
.then(([hospitalInfo,accomodationCost]) => {
//Return some json response from here
}).catch(function (err) {
return res.json({ "Message": err.message });
});
Zuerst müssen Sie wahrscheinlich hotelModel.aggregate() zurückgeben (und nicht nur aufrufen). Zweitens weiß ich nichts über Ihre Aggregatfunktion, aber von dem, was ich sehen kann, gibt es keine Auflösungsmethode, die in der übergebenen Funktion erreichbar ist. Denken Sie daran, dass Sie das Ergebnis immer zurückgeben müssen, damit Sie Versprechen verketten können. – sjahan
Sie müssen ein zweites "neues Versprechen" erstellen, um eine "Lösung" für das Callback "hotelModel.aggregate" zu erhalten. – Bergi