簡體   English   中英

強制程序執行,直到功能完成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM