第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用貓鼬連接到 mongoDB 的未處理承諾拒絕警告

使用貓鼬連接到 mongoDB 的未處理承諾拒絕警告

拉莫斯之舞 2022-12-29 13:51:03
所以我有這個(gè)代碼(簡化了一點(diǎn))來連接到數(shù)據(jù)庫,我DATABASE_URL故意錯(cuò)了所以我得到了一個(gè)錯(cuò)誤。但我不明白的是我得到的原因UnhandledPromiseRejectionWarning。有任何想法嗎?干杯!try {    startServer();} catch (err) {    console.log(err);}async function startServer () {    try {        await connectToDatabase;    } catch ( err ) {        throw err;    }}const connectToDatabase = new Promise((resolve, reject) => {    mongoose.connect(        process.env.DATABASE_URL,        {            useNewUrlParser: true,            useUnifiedTopology: true,        }    );    const database = mongoose.connection;    database.on(        'error',        err => reject(err)    );    database.once(        'open',        () => {            console.log('Connected to database...');            resolve(database);        }    );});
查看完整描述

2 回答

?
夢(mèng)里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊

mongoose.connect返回一個(gè)承諾。

所以你需要改變:

 const connectToDatabase = new Promise((resolve, reject) => {

    mongoose.connect(

      process.env.DATABASE_URL,

      {

        useNewUrlParser: true,

        useUnifiedTopology: true

      }

    )

      .then(() => {

        const database = mongoose.connection

       

        database.on('error', err => {

          logError(err);

        });

        database.once(

          'open',

          () => {

            console.log('Connected to database...')

            resolve(database)

          }

        )

      })

      .catch(reject)

  })

你應(yīng)該改進(jìn)這段代碼:


        database.on('error', err => {

          logError(err);

        });

因?yàn)橹灰诮⑦B接后出現(xiàn)錯(cuò)誤(如斷開連接),就會(huì)觸發(fā)此事件。


所以你不能對(duì)事件reject做出承諾。您應(yīng)該配置重新連接resolveopen



查看完整回答
反對(duì) 回復(fù) 2022-12-29
?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

通過這樣做:const connectToDatabase = new Promise((resolve, reject) => {...您Promise在頂層構(gòu)建一個(gè),然后在startServer. 這相當(dāng)于這樣做:


// Top level Promise rejection

Promise.reject('error');


其余代碼仍然有效,因?yàn)閍wait它適用于已經(jīng)解決的問題Promise(也可能Promise在等待時(shí)尚未解決),但您應(yīng)該構(gòu)建Promise內(nèi)部 a function:


try {

    startServer();

} catch (err) {

    console.log(err);

}


async function startServer () {

    try {

        await connectToDatabase();

    } catch ( err ) {

        throw err;

    }

}


function connectToDatabase() {

    return new Promise((resolve, reject) => {

        mongoose.connect(

            process.env.DATABASE_URL, {

            useNewUrlParser: true,

            useUnifiedTopology: true,

        });

        const database = mongoose.connection;

        database.on(

            'error',

            err => reject(err));

        database.once(

            'open',

            () => {

            console.log('Connected to database...');

            resolve(database);

        });

    });

}

有了這個(gè),您在創(chuàng)建后立即獲得new Promise only in的引用,然后它解決或拒絕并且可能的拒絕被捕獲并且不會(huì)冒泡到頂層。startServer


查看完整回答
反對(duì) 回復(fù) 2022-12-29
  • 2 回答
  • 0 關(guān)注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)