[英]Force program execution to wait until function finishes
我正在嘗試建立與數據庫的連接,並且希望看到在尚未建立連接的情況下我的代碼停止執行。 因此,它可以在正確的時間將錯誤/成功消息打印到控制台(在程序將輸出啟動成功之前)。
我當前建立連接的代碼是:
dbConnectAsync = async () => {
try {
await mongoose.connect("mongodb://localhost:27017/meetstation", { useNewUrlParser: true });
console.log(SUCCESS_MSG);
} catch (err) {
console.log(ERROR_MSG);
console.log(err.name);
}
}
我知道可以將所有其他代碼放在try塊中,但這不是理想的,因為我計划將建立數據庫連接的功能移至另一個文件。
有什么方法可以調用該函數,以強制其他代碼執行等待該函數執行完畢?
在您的代碼中,您可以等待dbConnectAsync
,然后在成功建立連接后運行。 因此,代碼將出現在單獨的try / catch塊中,而不出現在dbConnectAsync
的內部try / catch中。
async function program() {
try {
await dbConnectAsync();
// code that executes after successful connection
} catch (err) {
// handle connection error
}
}
我要提到的一個更改是在dbConnectAsync
的catch塊中使用throw
,以便任何使用代碼的都可以對其進行響應。 我上面的示例不會因此收到任何錯誤。
您可以將數據庫設置功能提取到模塊中:
// db.js
let connection;
export async function setup() {
try {
connection = await mongoose.connect('mongodb://localhost:27017/meetstation', { useNewUrlParser: true });
console.log(SUCCESS_MSG);
} catch (err) {
console.log(ERROR_MSG);
console.log(err.name);
}
}
export function getConnection() {
return connection;
}
初始化連接,然后啟動您的應用程序:
// main.js
import { setup, getConnection } from './db.js';
(async function bootstrap() {
await setup();
// start your application
// using getConnection()
})();
實際上,如果沒有數據庫,您的服務器將無法完成很多工作。 因此,發生錯誤時最適當的反應就是崩潰。 在頂層等待的情況下,我只需要編寫如下模塊:
export * from "mongoose";
import { connect } from "mongoose";
await connect("mongodb://localhost:27017/meetstation", { useNewUrlParser: true });
然后,每當您使用貓鼬時,請從該文件而不是從"mongoose"
本身導入它。 這樣,在數據庫准備就緒之前,任何代碼都不會運行,並且如果發生錯誤,服務器也將崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.