zoukankan      html  css  js  c++  java
  • Primise --(mongoose's default promise library)

    今天在学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.prototype.catch 方法返回promise 对象, 所以它们可以被链式调用;

    方法:

    Promise.prototype.catch(onRejected);

    Promise.prototype.then(onFulfilled, onRejected);

    编写一个promise函数,只需让其返回一个promise即可。

    基本用法:

    Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolvereject。它们是两个函数,由 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); });
  • 相关阅读:
    Uva 10935 Throwing cards away I
    Uva 3226 Symmetry
    eclipse @ 注释为何一写就报错
    2015省赛小感想
    Zoj 3842 Beauty of Array
    fedora 设置命令别名
    Uva220 Othello
    工作小技巧积累
    SSL介绍与Java实例
    一个完整的SSL连接建立过程
  • 原文地址:https://www.cnblogs.com/fangyinghua/p/7662277.html
Copyright © 2011-2022 走看看