ECMAScript6语法:Promise

在 ES6 之前,要实现异步调用,通常需要使用事件和回调函数。随着 Web 程序越来越复杂,使用事件和回调函数实现异步的方式并不能完全满足开发者的需求。而在 ES6 中提供的 Promise 可以更好地解决异步编程问题。

1、创建  Promise 对象

通过 Promise 构造函数可以创建一个 Promise 对象。Promise 构造函数只接受一个参数,该参数是一个执行器函数,在函数内包含需要异步执行的代码。执行器函数可以接受两个函数形式的参数,分别是 resolve() 函数和 reject() 函数。resolve() 函数用于在异步操作执行成功时调用,reject() 函数用于在异步操作执行失败时调用。示例代码如下:

//创建 Promise 对象,接受一个执行器函数
var promise = new Promise(function (resolve, reject) {
    setTimeout(function () {
        try {
            let a = 5 + 7;
            resolve(a);  //执行成功则调用 resolve() 函数
        } catch (ex) {
            reject(ex);  //执行失败则调用 reject() 函数
        }
    }, 1000);
});

上述代码中,在执行器函数中执行了异步操作,在 1 秒后计算两个数的和。如果执行成功则调用 resolve() 函数,并将计算的和作为参数,如果执行失败则调用 reject() 函数。

2、Promise 对象的 then() 方法

在 Promise 对象中有一个 then() 方法,该方法可以接收两个函数形式的参数,第一个是 Promise 异步操作成功完成时调用的函数,第二个是 Promise 异步操作执行失败时调用的函数。示例代码如下:

//创建 Promise 对象,接受一个执行器函数
var promise = new Promise(function (resolve, reject) {
    setTimeout(function () {
        try {
            let a = 5 + 7;
            resolve(a);  //执行成功则调用 resolve() 函数
        } catch (ex) {
            reject(ex);  //执行失败则调用 reject() 函数
        }
    }, 1000);
});

//在 Promise 对象中有一个 then() 方法,该方法可以接收两个函数形式的参数,
//第一个是 Promise 异步操作成功完成时调用的函数,
//第二个是 Promise 异步操作执行失败时调用的函数。
promise.then(function(value){
    console.log(value);   //12
},function(err){
    console.error(err.message);
});

3、Promise 对象的 catch() 方法

在 Promise 对象中还有一个 catch() 方法,该方法用于在执行异步操作失败后进行处理,相当于在 then() 方法中给出的异步操作执行失败时的代码。在通常情况下,then() 方法和 catch() 方法可以一起使用以处理异步操作的结果。示例代码如下:

//创建 Promise 对象,接受一个执行器函数
var promise = new Promise(function (resolve, reject) {
    setTimeout(function () {
        try {
            let a = 5 + 7;
            resolve(a);  //执行成功则调用 resolve() 函数
        } catch (ex) {
            reject(ex);  //执行失败则调用 reject() 函数
        }
    }, 1000);
});

//Promise 对象中的 catch() 方法,该方法用于在执行异步操作失败后进行处理,
//相当于在 then() 方法中给出的异步操作执行失败时的代码。
promise.then(function(value){
    console.log(value);//12
}).catch(function(err){
    console.error(err.message);
});

说明:

如果在调用resolve()函数时带有参数,那么该参数会传递给then()方法的回调函数,如果在调用reject()函数时带有参数,那么该参数会传递给catch()方法的回调函数。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值