zoukankan      html  css  js  c++  java
  • promise的使用

    之前使用promise都是用时会,用时理解,过后一段时间没有又忘了,今天有空正好整理一下,方便日后自己查阅。-- 代码来源于阮一峰老师的 promise

     Promise有4个方法:

    [ resolve,  reject,  all,  race ]

    常见的resolve和reject  

     resolve: 成功时的回调函数

     reject:    失败时的回调函数

    //定义 Promise 的回调函数
    function test(resolve, reject) {
      //采用随机数来模拟成功和失败。
      var timeOut = Math.random() * 2;
      console.log('set timeout to: ' + timeOut + ' seconds.');
      setTimeout(function(){
        if (timeOut < 1) {
          // 成功 resolve
          console.log('call resolve()....');
          resolve('200 ok');
        } else {
          // 失败 reject
          console.log('call reject()...');
          reject('timeout in:' + timeOut + ' seconds.');
        }
      }, timeOut * 100);
    }
    
    
    new Promise(test)
    .then(result => { //成功后进行的代码操作
     console.log('success');
    })
    .catch(reason => { //失败后进行的代码操作
     console.log('fail');
    })

    这里的test回调函数是来处理请求数据,接口等的, 而后面的then就是来执行请求成功后的操作, catch是来处理失败后的操作。

    Promise.all(数组)  同时进行的异步操作

    // Promise.all(数组)  同时进行的异步操作
    var p1 = new Promise((resolve, reject)=>{
     // 采用随机数来模拟成功和失败。
    var err = Math.random() > .5 ? true : false; if (err) { setTimeout(reject, 600, 'P1'); } else { setTimeout(resolve, 600, 'P1'); } }) var p2 = new Promise((resolve, reject)=>{
    //采用随机数来模拟成功和失败。
    var err = Math.random() > .5 ? true : false; if (err) { setTimeout(reject, 300, 'P2'); } else { setTimeout(resolve, 300, 'P2'); } }) //p1,p2操作成功就执行then Promise.all([p1, p2]).then(results=>{ console.log('成功: '+results); }) //p1,p2其中有一个操作失败就执行catch .catch(reason=> { console.log('错误:'+reason); })

    Promise.race([p1, p2]) 对同时进行的异步操作,那个先执行完就采用那个(比如:同时向两个URL读取用户的个人信息,只需要获得先返回的结果即可。[阮一峰老师的比如])

    var p1 = new Promise((resolve, reject)=>{
      var err = Math.random() > .5 ? true : false;
      if (err) {
        setTimeout(reject, 600, 'P1');
      } else {
        setTimeout(resolve, 600, 'P1');
      }
    })
    
    var p2 = new Promise((resolve, reject)=>{
      var err = Math.random() > .5 ? true : false;
      if (err) {
        setTimeout(reject, 300, 'P2');
      } else {
        setTimeout(resolve, 300, 'P2');
      }
    })
    
    
    // p1,p2同时操作,哪一个先得到结果就执行那个,成功执行then,失败就执行catch
    Promise.race([p1, p2]).then(results=>{
     console.log('成功: '+results);
    }).catch(reason=> {
     console.log('错误:'+reason);
    })

    完(皮皮虾, 皮一下)。

  • 相关阅读:
    C#事务相关
    建造者模式
    CUPS/Printer sharing
    vim note write
    linux下神奇的script
    Nginx server之Nginx添加ssl支持
    nginx使用ssl模块配置HTTPS支持
    stardict dict url
    收银台(POSBox) 配置向导
    让 Odoo POS 支持廉价小票打印机
  • 原文地址:https://www.cnblogs.com/webBlog-gqs/p/9342130.html
Copyright © 2011-2022 走看看