私はNodeJsで新しく、私はQフレームワークを使ってコードを公開しています。 そして、私は 'Q'フレームワークをあまりよく理解していないと思われます。私は、約束が早すぎると返答するケースにぶつかります。この関数は、いくつかのDBクエリを実行し、結果を返すことになっている、NodeJsの返答が遅すぎる
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);
});
上記のコードは、関数を呼び出しgetBridgeInfo: はここに私のコードです。ここ は、私はこのコードを実行すると、私はgetBrigeInfoを呼び出す私のメインのコードで、それはgetBRidgeInfoは、完全にgetBridgeInfoのSQLクエリを実行する前であってもそのキャッチエラーハンドラを打つことがわかり** 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");
}
});
のコードですその後の結果が表示されます。
私は約束を使用している方法は、任意の説明をしてください
こんにちは、応答のためのおかげで、私もQ.asyncは約束を返すメソッドを作成するための正しい方法ではないことを考え出しました。 Q.promiseオブジェクトを返すgetBridgeInfoがありました。 – Nitesh