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

    完(皮皮虾, 皮一下)。

  • 相关阅读:
    js监听手机端点击物理返回键或js监听pc端点击浏览器返回键
    mysql存储emoji问题
    windows环境下 php 将office文件(word/excel/ppt)转化为pdf
    javascript 获取多种主流浏览器显示页面高度
    iframe 加载外部资源,显示隐藏loading,onload失效
    ubuntu 忽略文件的50unattended升级问题
    ubuntu apt 软件源的更改
    Python3.6连接mysql(一)
    H5图片预览、压缩、上传
    前端如何上传图片到七牛云
  • 原文地址:https://www.cnblogs.com/webBlog-gqs/p/9342130.html
Copyright © 2011-2022 走看看