Ich habe einen Nodejs Express-Server und ich arbeite mit Bluebird Promises für die Synchronisierung aller asynchronen Sachen.Bluebird Versprechen Variable: 'undefined ist keine Funktion'
Alles funktioniert auf localhost eine AWS RDS MySQL-Datenbank, in Ordnung, aber wenn ich den Server auf meine AWS EC2-Instanz hochgeladen Ich habe ein Problem mit dieser Funktion gefunden:
var Promise = require('bluebird');
var db = require('./db');
exports.matchValue = function (params) {
return new Promise(function(resolve, reject) {
var findValue = new Promise();
if (params.find.includes(".")) {
var aux = params.find.split(".");
var matchBy = {};
if (aux[0]) matchBy.a = aux[0];
if (aux[1]) matchBy.b = aux[1];
findValue = db.getValues1(params.limit,params.page,matchBy);
}
else {
findValue = db.getValues2(params.limit,params.page,params.find);
}
findValue
.then(function(result) {
resolve(result);
})
.catch(function(err) {
reject(err);
});
});
}
ich die Variable findvalue erklärt haben, als neues Versprechen, da es abhängig von der if-Bedingung den Wert einer anderen Datenbankabfragefunktion erhält (diese Funktionen geben ein Promise zurück).
Wenn ich diese Funktion aufrufen, ist das das Ergebnis: "undefined ist keine Funktion".
Ich verstehe, dass dieses Verhalten passiert, weil es zuerst findValue.then()
als if/else
Blockcode ausführt, und da die Variable nicht definiert ist, kann es eine Funktion sein.
Ich dachte, dass eine Variable als eine neue Promise deklarieren wird es warten wird, bis die Rückgabe der dieser Variablen zugewiesenen Funktion beendet wird, aber tatsächlich nicht geschieht.
Was mache ich falsch? Kann mir jemand helfen?
Danke in Beratung !!
** Woher **, genau, erhalten Sie den Fehler? –
Was ist "params.find"? Weil Sie 'params.find.includes' verwenden, das, wenn' params.find' ein Array ist, relativ neu ist und nicht auf älteren JavaScript-Engines existiert. –
Ich bekomme den Fehler auf '.then (Funktion (Ergebnis)' und es passiert nur, wenn der Knoten auf einer EC2-Instanz ausgeführt wird, wenn es auf localhost ausgeführt wird, Ergebnis enthält die Abfrageantwort und params.find ist nur eine Zeichenfolge. Danke. " – javing