猫鼬5异步连接故障

时间:2019-07-13 15:25:56

标签: node.js asynchronous mongoose async-await

根据this,在初始连接期间处理错误的正确方法是:

try {
  await mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
} catch (error) {
  handleError(error);
}

不幸的是,这导致了SyntaxError:

await mongoose.connect(mongoConnectionString, { useNewUrlParser: true });
       ^^^^^^^

SyntaxError: Unexpected identifier

当我删除await时,代码被执行而没有任何问题。当我用Google搜索SyntaxError: Unexpected identifier with await时,发现await与非异步函数一起使用时会发生这种情况。但这没有任何意义,因为Mongoose从版本5开始使用asnyc connect。另外,以下异步代码也可以正常运行:

mongoose.connect(mongoConnectionString, {
       useNewUrlParser: true
     })
       .then(() => console.log('MongoDB Connected'))
       .catch(err => console.log(err));
   });

package.json中的依赖项: "mongoose": "^5.6.0

index.js

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const mongoConnectionString = `mongodb://${process.env.MONGO_DB_USER}:${process.env.MONGO_DB_PW}@mongodb4711:27017/visitor-ips`;

initialMongoConnect(mongoose, mongoConnectionString);

function initialMongoConnect(mongoose, mongoConnectionString) { 
   try {
     await mongoose.connect(mongoConnectionString, { useNewUrlParser: true });

   } catch (error) {
     handleError(error, mongoose, mongoConnectionString);
   }
  console.log('Initial connect to MongoDB successful');
}

function handleError(error, mongoose, mongoConnectionString) {
   console.log('Error on initial connection: ' + error);
   // wait 3 seconds and try to do the initial connect again
   setTimeout(function() {initialMongoConnect(mongoose, mongoConnectionString)}, 3000);
}

那么await在这里有什么问题?

1 个答案:

答案 0 :(得分:-1)

猫鼬异步操作,默认情况下它支持promise运行async,它不需要等待功能,因为它在成功使用时是异步的,然后(()=>“连接时应该做什么)如果错误使用catch( ()=>“发生错误时发生的情况),您应该使用关键字来使用要在启动要作为异步函数示例运行的函数时使用的异步等待 const a = async function(){ 等待///等待的是什么需要