promise的简单用法

栏目: JavaScript · 发布时间: 5年前

内容简介:在es6中,promise终于成为了原生对象,可以直接使用。promise是异步编程的一种解决方案。解决了异步回调多层嵌套的问题。1.promise状态的理解

在es6中,promise终于成为了原生对象,可以直接使用。

promise是异步编程的一种解决方案。解决了异步回调多层嵌套的问题。

1.promise状态的理解

用new Promise实例化的promise对象有三个状态:resolved(fulfilled) rejected pending

2.promise的简单用法

// 封装一个方法run_a,当Math.random()取的值小于0.5时执行resolve,否则执行reject
var run_a  = function () {
    var _promise = new Promise(function(resolve, reject){
        // 模拟异步
        setTimeout(function () {
            var rand = Math.random()
            if (rand < 0.5) {
                resolve('resole_a ' + rand)
            } else {
                reject('reject_a ' + rand)
            }
        }, 300)
    })
    return _promise
}
// 封装一个方法run_b,当Math.random()取的值小于0.5时执行resolve,否则执行reject
var run_b  = function () {
    var _promise = new Promise(function(resolve, reject){
        setTimeout(function () {
            var rand = Math.random()
            if (rand < 0.5) {
                resolve('resole_b ' + rand)
            } else {
                reject('reject_b ' + rand)
            }
        }, 300)
    })
    return _promise
}

run_a().then(function (data) {
    console.log('第一次产生的值:', data) // 第一次resolve才能进then,否则直接进catch
    return run_b() // 第一次resolve才能执行第二次,并且第二次的值必须继续.then才能获得。
    // 此处必须return出来才能链式调用
}).then(function (data) {
    console.log('第二次产生的值:', data)
}).catch(function (e) {
    console.log('失败:', e)
})
复制代码

3.promise的一些方法

axios是promise的实现版本,axios执行后返回一个promise对象

axios.post('xxx').then(res => {
    return axios.post('bbb', {name: res.name})
}).then(res => {
    console.log(res)
})
复制代码

promise的其他方法all, race

Promise.all([
    axios.get('xxx'),
    axios.get('aaa')
]).then().catch(error=>{
    
})
复制代码

promise.all([p1,p2,p3])当p1,p2,p3的状态都变成resolved时,promise的状态才会变成resolved

promise.race([p1,p2,p3])竞速方法,p1,p2,p3只要有一个改变状态,promise就会立即变成相同的状态并执行对应的回调。

promise.all(参数是promise对象)

var run_c  = function () {
    var _promise = new Promise(function(resolve, reject){
        setTimeout(function () {
            var rand = Math.random()
            if (rand < 0.5) {
                resolve('c_ok ' + rand)
            } else {
                reject('c_error ' + rand)
            }
        }, 1000)
    })
    return _promise
}
var run_d  = function () {
    var _promise = new Promise(function(resolve, reject){
        setTimeout(function () {
            var rand = Math.random()
            if (rand < 0.5) {
                resolve('d_ok ' + rand)
            } else {
                reject('d_error ' + rand)
            }
        }, 1000)
    })
    return _promise
}
Promise.all([run_c(), run_d()]).then(function (data) {
    console.log('全部执行完:', data)
}, function (e) {
    console.log('promise.all有异常:', e)
})
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

马云:未来已来

马云:未来已来

阿里巴巴集团 / 红旗出版社 / 2017-4-1 / CNY 49.00

阿里巴巴集团:全球主要的互联网公司之一,由马云带领其他17个创始人,于1999年在中国杭州创立。阿里巴巴集团经营多元化的互联网业务,以“让天下没有难做的生意”为使命,致力于为创业者和消费者提供全球化的商业平台,打造开放、协同、繁荣的电子商务生态系统。自成立以来,阿里巴巴集团建立了领先的消费者电子商务、网上支付、B2B网上交易市场及云计算业务,并积极开拓无线应用、手机操作系统和互联网电视等领域。一起来看看 《马云:未来已来》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具