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);
    })

    完(皮皮虾, 皮一下)。

  • 相关阅读:
    出于安全考虑,office outlook禁止对潜在不安全因素的附件访问,如何解决
    70级圣骑士OK了,纪念下先!
    03.配置putty连接Linux系统,并实现中英文输入输出;配置vnc服务器
    想了解你好有的装备及属性吗,副本及飞行点的位置吗?简单!
    Windows Server 2008 下载、安装、激活
    同事的U盘写保护了!
    重新开始核心编程,Windows的开始
    如何知道某PC接入到交换机的哪个端口上
    DK装备获取线路总结
    Windows Server 2008 评估时间延期
  • 原文地址:https://www.cnblogs.com/webBlog-gqs/p/9342130.html
Copyright © 2011-2022 走看看