Ich bin neu bei NodeJs und Code, mit dem ich arbeite, verwendet Q Framework für Versprechen. Und es scheint, dass ich das Q-Framework nicht so gut verstehe, ich stoße auf einen Fall, wenn Versprechen zu früh zurückkommen. Hier ist mein Code:NodeJs verspricht zu früh zurück
BridgeInfo.getBridgeInfo(exten)
.then(function processBridgeInfo(bridge_info) {
console.log("Nitesh -- bridge info is back, yay");
if (bridge_info !== undefined) {
conf_bridge = new VoxConfBridge(ari);
conf_bridge.init(bridge_info);
/**Add the bridge to the bridgeList**/
bridgeList[conf_bridge.bridge.id] = conf_bridge;
console.log("Bridge ID to register is "+ conf_bridge.bridge.id);
self.registerEvents(conf_bridge.bridge);
conf_bridge.registerUser(event, false, channel);
} else {
console.log("Unknown extension [" + exten + "] blocking it");
ChannelDriver.blockChannel(ari, channel.id);
}
})
.catch(function handleError(err) {
console.error("Nitesh -- [voxbridgemanager] error occured "+err);
});
Der obige Code ruft eine Funktion getBridgeInfo, diese Funktion soll einige DB-Abfragen tun und das Ergebnis zurück. Hier ist der Code in getBridgeInfo
BridgeInfo.getBridgeInfo = Q.async(function(bridge_identifier) {
console.log("Nitesh -- Getting the bridge info for ["+ bridge_identifier + "]");
if (bridge_identifier !== undefined) {
db.getConfBridgeProfile(bridge_identifier)
.then(function processBridgeProfile(result) {
if (result !== undefined) {
console.log("Nitesh -- Bridge Info is "+ JSON.stringify(result));
var bridge_info = new BridgeInfo();
bridge_info.init(result)
.then (function bridgeInfoInitDone() {
return bridge_info;
})
.catch(function handleError(err) {
console.error("Nitesh ---[bridgeInfoInit] Error is "+ err);
});
}
else {
console.log("Can't find any bridge profile for this identifier ["+ bridge_identifier + "]");
}
}, function handleError(err) {
console.error("Failed to retrieve bridgeInfo");
});
} else {
console.error("Received an invalid identifier");
}
});
** Wenn ich diesen Code ausführen, sehe ich, dass in meinem Haupt-Code, der getBrigeInfo nennt, trifft es seinen Fang Fehlerbehandlung auch vor getBRidgeInfo vollständig ausgeführt hat, getBridgeInfo SQL-Abfrage Ergebnisse erscheinen danach.
Ich denke, die Art, wie ich bin mit Versprechungen nicht richtig gemacht wird, irgendwelche Erklärungen
Hallo, danke für die Antwort, ich herausgefunden, dass auch Q.async nicht der richtige Weg ist, ein Verfahren zu schaffen, die ein Versprechen zurück. Ich hatte getBridgeInfo, um Q.-promise-Objekt zurückzugeben – Nitesh