今天在学nodejs的时候,遇到一个错误;刚开始完全不知道说的是什么,为什么会出现这个错误
DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead;
因为我是调用数据的库的方法中使用了then()方法;
User.findOne({
username: username//查询条件
}).then(function (userInfo) {}
解决方法:
mongoose.Promise = global.Promise;
解释:
Promise表示一个异步操作的最终结果。与Promise最主要的交互方法是通过将函数传入它的then方法从而获取得Promise最终的值或Promise最终被拒绝(reject)的原因。
ECMAScript 6 规范:
Promise 是一个对象, 是异步编程的一种解决方案,,从它可以获取异步操作的消息;
语法学习:
状态:
pending:初始状态;
rejected:操作失败;
fulfilled:操作成功;
Promise
对象的状态改变,只有两种可能:从pending
变为fulfilled
和从pending
变为rejected
。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
和 Promise.prototype.then
方法返回promise 对象, 所以它们可以被链式调用;Promise.prototype.catch
方法:
Promise.prototype.catch(onRejected);
Promise.prototype.then(onFulfilled, onRejected);
编写一个promise函数,只需让其返回一个promise即可。
基本用法:
Promise
构造函数接受一个函数作为参数,该函数的两个参数分别是resolve
和reject
。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
resolve
函数的作用是,将Promise
对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject
函数的作用是,将Promise
对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
var promise = new Promise(function(resolve, reject) { // ... some code
if (/* 异步操作成功 */){ resolve(value); }
else { reject(error); }
});
promise.then(function(value) {// success},
function(error) {
// failure
});
eg:
var getJSON = function(url) {
var promise = new Promise(function(resolve, reject){
var client = new XMLHttpRequest();
client.open("GET", url);
client.onreadystatechange = handler;
client.responseType = "json";
client.setRequestHeader("Accept", "application/json");
client.send();
function handler() {
if (this.readyState !== 4) {
return; }
if (this.status === 200) {
resolve(this.response); }
else {
reject(new Error(this.statusText));
}
};
});
return promise;
};
getJSON("/posts.json").then(function(json) { console.log('Contents: ' + json); }, function(error) { console.error('出错了', error); });