Я создаю приложение, в котором у меня есть 2 разных модуля. Одним из них является соединение с mongodb, а другой модуль - соединение redis для управления сеансом. В этом случае каждый модуль имеет 2 события и подключается. Вот пример одного из модулей:Подождите несколько событий из разных модулей, а затем запустите сервер
var sessionStore = new SessionStore(app.get("sessionStore"));
sessionStore.client.on("error", function(err) {
console.error("[SessionStore]:", "connection error:", err.address + ":" + err.port, "for process:", process.pid);
var sessionStoreError = new Error("Session store error");
sessionStoreError.message = "Session store connection error";
sessionStoreError.code = err.code;
sessionStoreError.address = err.address;
sessionStoreError.port = err.port;
app.emit("error", sessionStoreError);
});
sessionStore.client.on("connect", function() {
console.log("[SessionStore]:", "connection established:", app.get("sessionStore").host + ":" + app.get("sessionStore"), "for process:", process.pid);
app.emit("ready");
});
Почти точно так же происходит с модулем MongoDB.
То, что я хотел бы достичь (избегая пирамиду обреченности) что-то вроде этого, но когда оба Redis и соединение MongoDB из своих модулей успешны:
app.on("ready", function(){
app.listen(app.get("port"));
});
Имейте в виде, что я мог бы гнездо каждого модуля внутри другого и, возможно, потребуют последовательных модулей внутри обработчиков подключений, а затем испускать последнее событие для приложения, но это не изящно, я полагаю, согласно моим вкусам.
Есть ли элегантный способ подождать 2 события, а затем запустить сервер?
Вы должны проверить обещания, и подождать, пока все обещания, используя обещание.all (promisesArray) – mkinawy