• 技术文章 >web前端 >js教程

    Promise概述和常用方法介绍

    零下一度零下一度2017-07-16 14:46:23原创992

    Promise概述

    Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口。

    那么,什么是Promises?

    首先,它是一个对象,也就是说与其他JavaScript对象的用法,没有什么两样;其次,它起到代理作用(proxy),充当异步操作与回调函数之间的中介。它使得异步操作具备同步操作的接口,使得程序具备正常的同步运行的流程,回调函数不必再一层层嵌套。

    简单说,它的思想是,每一个异步任务立刻返回一个Promise对象,由于是立刻返回,所以可以采用同步操作的流程。这个Promises对象有一个then方法,允许指定回调函数,在异步任务完成后调用。

    比如,异步操作f1返回一个Promise对象,它的回调函数f2写法如下。

    (new Promise(f1)).then(f2);

    前言

    Promise是JavaScript异步操作解决方案,最近看到项目里不少人用了Promise 的库类,比如 bluebird、q 、jQuery.Deffered 等 polyfill promise 方式,使用的时候翻看长长的文档,真心累觉不爱。

    es5 发展到现在,node 在0.12版本就已经支持了promise, 在客户端,大部分浏览器也支持了Promise, 如果要兼容低版本的浏览器,可以加上es5-shim等 polyfill promise。下面话不多说,来一起看看详细的介绍:

    用法

    Promise 常用场景。

    一、处理异步回调

    Promise 的基本用法, 处理异步回调。

    function Pro1(){
     return new Promise(function(resolve, reject) {
      setTimeout(function(){
       resolve('pro1')
      }, 300)
     })
    }
    //调用
    Pro1()
    .then(function(data){
     console.log(data) //pro1
    })
    .catch(function(err){
     throw new Error(err)
    })

    二、多个异步函数同步处理

    有时候我们需要发送两个ajax,希望他们能一起把数据返回,就可以采用下面的办法。


    function Pro1(){
     return new Promise(function(resolve, reject) {
      setTimeout(function(){
       resolve('pro1')
      }, 300)
     })
    }
    function Pro2(){
     return new Promise(function(resolve, reject) {
      setTimeout(function(){
       resolve('pro2')
      }, 300)
     })
    }
    //调用
    var Pro = Promise.all([Pro1(), Pro2()]);
    Pro
    .then(function(data){
     console.log(data[0], data[1]) //Pro1 Pro2
    })
    .catch(function(err){
     throw new Error(err)
    })

    三、异步依赖异步回调

    有些场景是一个异步依赖另一个异步的返回值的,就可以采用下面的用法。

    比如: 用一个订单号异步取到订单详情,再用订单详情里的商品Id获取到商品详情

    function Pro1(orderId){
     return new Promise(function(resolve, reject) {
      setTimeout(function(){
       var orderInfo = {
        orderId: orderId,
        productIds: ['123', '456']
       }
       resolve(orderInfo.productIds)
      }, 300)
     })
    }
    function Pro2(productIds){
     return new Promise(function(resolve, reject) {
      setTimeout(function(){
       var products = productIds.map(function(productId){
        return {
         productId: productId,
         name: '衣服'
        }
       })
       resolve(products)
      }, 300)
     })
    }
    //调用
    
    Pro1('abc123')
    .then(function(productIds){
     console.log('商品id',productIds) 
     return Pro2(productIds)
    })
    .then(function(products){
     console.log('商品详情',products) 
    })
    .catch(function(err){
     throw new Error(err)
    })

    四、封装统一的入口办法或者错误处理

    错误处理


    function ErrorHandler(promiseObj, rejectOrResOrCallback){
     return promiseObj.then(null, function(err){
     if(!err)
     })
    }

    以上就是Promise概述和常用方法介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:Promise 介绍 方法
    上一篇:OPENLAYERS3实现点选的方法有哪些? 下一篇:JS实现数组去重的实例介绍
    大前端线上培训班

    相关文章推荐

    • javascript怎么将字符转换成数字• javascript es6数组方法有哪些• javascript怎么将float转为int类型• javascript怎么设置p的值• javascript如何获取当前方法名

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网