【问题标题】:MongoDB Promise LibraryMongoDB 承诺库
【发布时间】:2018-08-02 09:00:36
【问题描述】:

给 Mongo 使用 ES6 promiselibrary 的指令, 使用此代码:

mongoose.Promise = global.Promise;

但我仍然收到以下错误:

(node:17264) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: done is not defined
(node:17264) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

为什么会出现此错误,我该如何解决?

【问题讨论】:

  • 我首先要查找您在哪里使用 done - 这是未定义的 - 您认为 done 是什么?

标签: javascript mongodb cmd promise es6-promise


【解决方案1】:

以下代码行:

mongoose.Promise = global.Promise;

设置 Mongoose 库现在向您返回承诺。 Promise 是一种数据结构,可帮助您处理异步代码。

对数据库的所有查询都是异步的,这意味着它们不会阻止其他代码运行。异步代码通过event loop 执行。

当一个promise返回一个值时,如果promise成功,你可以通过.then传递一个回调,并通过.catch传递一个值失败例如:

// create a new promise
let promise = new Promise((res, rej) => {
	if((Math.random() *10) >5){
  	res();
	}else{
  rej();
  }
})

// call .then for success and .catch for failure
promise.then(()=>{
	console.log('im above 5');
}).catch(()=> {
	console.log('im below 5');
})

// this code gets executed first because its synchronous
console.log('im synchronous and get exectued before async');

要消除您的特定错误,您需要对 mongoose 库返回的 promise 进行错误处理 .catch 方法。

我建议你阅读更多关于异步代码and promises 的内容,一段时间后你就会明白它是如何工作的;)

【讨论】:

  • 谢谢,一定会更深入地了解这一点。试图跟随一切,但这不是最简单的开始。你有什么建议要遵循什么样的课程?我通常在看/做然后阅读时学得更好。
  • Udemy 通常会以优惠的价格提供非常好的课程,只需学习 Javascript 和 Node.js 课程即可
  • 谢谢,我去看看。所以我不明白的是,我实际上目前正在学习 Udemy 的关于 MongoDB 的课程,而讲师只是输入了关于 global.promise 等的内容,对他来说一切都很好。我一直在关注他的代码,对我和他来说一切都一样,但对我来说,代码不起作用?
  • 这是因为他的 Node.js 版本比较旧,所以当你没有使用 .catch 子句处理 promise 时,它​​不会被认为是错误
【解决方案2】:

您需要处理拒绝承诺的可能性。此参考可能会有所帮助 http://thecodebarbarian.com/unhandled-promise-rejections-in-node.js.html

【讨论】:

  • 对不起,这对我来说是很多未知的术语,你能简单地回答我如何解决它吗?
猜你喜欢
  • 1970-01-01
  • 2023-01-16
  • 2017-07-23
  • 2017-03-07
  • 2014-03-11
  • 2017-08-01
  • 2019-01-05
  • 2015-05-05
  • 2015-10-06
相关资源
最近更新 更多