• Promise 让异步更优


    每个异步方法都返回一个Promise

    更优雅.

    then方法

    每一个Promise  都有一个叫then 的方法,

    接受一对callback    被解决时调用,resolve,

    被拒绝   rejected 遇到错误

    obj.save().then(function(obj){

    }, function(error) {

    });

    第二个参数可选

    try, catch, 和final方法

    obj.save().try(function(obj) {

    }).catch(function(error) {

    }).finally(function(){

    });

    兼容其他Promise库,

    别名

    AV.Promise#done   try

    AV.Promise#fail    catch

    AV.Promise#always finally

    obj.save().done(function(obj){

    }).fail(function(error) {

    }).always(function(){

    });

    将Promise 组织在一起

    Promise 比较神奇, 代替多层嵌套方式来解决异步请求代码的调用顺序问题。

    如果一个Promise的回调会返回一个Promise 那么

    第二个then 里的callback 在第一个then 的callback 没有解决前是不会解决的.

    Promise Chain

    var query = new AV.Query('Student');

    query.descending("gpa");

    query.find().then(function(students){

      students[0].set("valedictorian",true);

      return students[0].save();

    }).then(function(valedictorian) {

      return query.find();

    }).then(function(students){

      students[1].set("salutatorian",true);

      return students[1].save();

    }).then(function(salutatorian){

    });

    错误处理

    一个链中的Promise 返回一个错误的话, 所有成功的callback

    在接下来都会被跳过直到遇到一个处理错误的callback

    转换error 或者返回一个新的promise 来处理它.

    var query = new AV.Query('Student');

    query.descending('gpa');

    query.find().then(function(students) {

      students[0].set("valedictorian",true);

      return AV.Promise.error("THere was an error.");

    }).then(function(valedicator) {

      return query.find();

    }).then(function(students) {

      students[1].set('salutatorian',true);

      return students[1].save();

    }, function(error) {

      return AV.Promise.as('Hello');

    }).then(funciton(hello) {

    })

    在正常情况的回调函数的未尾,加一个错误处理

    的回调函数,是一种很常见的做法 

    var query = new AV.Query("Student");

    query.descending("gpa");

    query.find().try(function(students) {

      students[0].set("valedictorian", true);

      return AV.Promise.error("There was an error.";)

    }).try(function(valedictorian) {

      return query.find();

    }).try(function() {

      students[1].set()

    }).catch(function(error) {

      return AV.Promise.as("Hello!");

    }).catch(fucntion(error) {

      

    })

    find save 会生成Promise

    创建Promise

    resolve  reject 来触发它的callback

    var successful = new AV.Promise();

    successful.resolve("the good result");

    var failed = new AV.Promise();

    failed.reject("An error message.");

    var successful = AV.Promise().as("The good reulst.";)

    var failed = AV.Promise.error("The error message".

    )

    var promise = new AV.Promise(function(resolve,reject) {

      resolve(42);

    })

    promise.then(function(ret) {

      console.log(ret);

    })

    顺序的Promise

    某一行的数据做一系列的任务的时候, Promise 链很方便的,

    每一个任务都等着前一个任务结束。

    删除你的博客上的所有评论。

    var query = new AV.Query("Comment");

    query.equal("post",post);

    query.find().then( function(results) {

      var promise = AV.Promise.as();

      _.each(results, function(result) {

        promise = promise.then(function() {

          return result.destroy();

        })

      });

      return promise;

    }).then(function() {

    });

    并行的Promise

    多个任务,   when  方法, 开始几个操作。 

    作用AV.Promise.when 来创建一个新的promise

    Promise 被resolve 之后ft才被resolve

    更多消耗系统资源和带宽。

    function timePromisefy(delay) {

      return new AV.Promise(function(resolve) {

        setTimeout(function() {

          resolve(delay);

        })

      })

    }

    var startDate = Date.now();

    AV.Promise.when(

      timePromisefy(1),

      timePromisefy(32),

      timePromisefy(64),

      timePromisefy(128)

    )).then(function(r1,r2,r3,r4) {

      console.log(new Date() - startDate);

    })

    var startDate = Date.now();

    AV.Promise.when(

      time

    )

    var query = new AV.Query("Comment");

    query.equalTo("post",post);

    query.find().then(function(results) {

      var promise = [];

      _.each( results,  function(result) {

        promises.push(result.destroy());

       });

      return AV.Promise.when(promises);

    }).then(function() {

    });

    错误处理中返回所有遇到的错误信息,以数组形式提供。

    AV.Promise.all

    数组形式的输入, 错误处理, 而不是等所有promise 完成.

    AV.Promise.all([

      timerPromisefy(1),

      timerPromisefy(32)

    ]).then( function(values) {

    })

    race方法

    AV.Promise.race 方法按收一个 promise 数组接入,扔resolve 时或者reject 

    该函数会函回  resolve  或者reject 

    var p1 = new AV.Promise.as(1),

      p2 = new AV.Promise.as(2),

      p3 = new AV.Promise.as(3);

    Promise.race([p1,p2,p3]).then(function(value) {

      console.log(value);

    })

    var delay= function(millis) {

      var promise = new AV.Promise();

      setTimeout()function() {

        pormise.resolove();

      },millis);

      return promise;

    }

    delay(100).then(function(){

    })

    AV.Promise.setPromisesAPLusCompiant(true);

    process.on('uncaughtException');

    AV.Promise.setDebugError(true);

  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/yushunwu/p/5034712.html
Copyright © 2020-2023  润新知