资讯专栏INFORMATION COLUMN

Promise 的四种常用方法。

wangzy2019 / 1539人阅读

摘要:前言看到项目里不少人用了的库类,比如等方式,使用的时候翻看长长的文档,真心累觉不爱。用法常用三个场景。处理异步回调多个异步函数同步处理异步依赖异步回调封装统一的入口办法或者错误处理处理异步回调的基本用法,处理异步回调。

前言

看到项目里不少人用了Promise 的库类,比如 bluebird、q 、jQuery.Deffered 等 polyfill promise 方式,使用的时候翻看长长的文档,真心累觉不爱。
es5 发展到现在,node 在0.12版本就已经支持了promise, 在客户端,大部分浏览器也支持了Promise, 如果要兼容低版本的浏览器,可以加上es5-shimpolyfill 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)
    })
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79909.html

相关文章

  • Promise异步函数顺序执行四种方法

    摘要:前几天遇到一个编程题,要求控制顺序执行,今天总结了一下这个至少有好四种方法都可以实现,包括嵌套,通过一个串起来,,实现,以下逐一介绍。 前几天遇到一个编程题,要求控制promise顺序执行,今天总结了一下这个至少有好四种方法都可以实现,包括promise嵌套,通过一个promise串起来,generator,async实现,以下逐一介绍。原题目如下: //实现mergePromise函...

    Awbeci 评论0 收藏0
  • JavaScript 异步编程四种方式

    摘要:异步编程是每个使用编程的人都会遇到的问题,无论是前端的请求,或是的各种异步。本文就来总结一下常见的四种处理异步编程的方法。利用一种链式调用的方法来组织异步代码,可以将原来以回调函数形式调用的代码改为链式调用。 异步编程是每个使用 JavaScript 编程的人都会遇到的问题,无论是前端的 ajax 请求,或是 node 的各种异步 API。本文就来总结一下常见的四种处理异步编程的方法。...

    microelec 评论0 收藏0
  • Vue.js应用四种AJAX请求数据模式

    摘要:应用的四种请求数据模式翻译原文出处鄙人翻译略差,别见笑。每个都有自己的利弊,应根据要求进行判断。二组件在使用框架时,组件负责管理自己的请求和独立状态。相反,将初始应用程序状态注入页面的内联脚本中,以便应用程序作为全局变量在需要时可用。 Vue.js应用的四种AJAX请求数据模式 翻译原文出处:4 AJAX Patterns For Vue.js Apps 鄙人翻译略差,别见笑。 如果...

    iKcamp 评论0 收藏0
  • css清除浮动常用四种方法实现

    摘要:用这种方法清除浮动,会为文档中增加不必要的结构,不推荐。可以包含浮动元素,所以能实现撑起高度的效果。以上是常用的几种方法,可以根据场景的不同选择适合的。 在页面布局中经常会用到浮动和清除浮动的操作,但之前是知其然而不知其所以然,看过多篇文章后,有了一些深入的了解,特整理下来! 浮动的目的: 最初设计浮动的目的是为了实现文字等内容可围绕图像显示,后来发现浮动方便布局,所以支持浮动任何元素...

    iliyaku 评论0 收藏0
  • JavaScript创建对象四种方式

    摘要:这种方式和有异曲同工之处,因为是对象的构造函数,它的原型对象也是的方式四这种方式叫做使用对象字面量创建对象,这是最简单的一种方式,也是我经常使用的方法,目的是在于简化创建包含大量属性的对象的过程。 关键字 Object.create; new Object(); new Fn(); {} 背景 此段可跳过不读……在平时的使用中,创建对象最常用的方式是使用{}直接创建,里面直接写方法和属...

    2450184176 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<