es6 promise对象

本文详细介绍了JavaScript中的Promise对象,包括其构造函数、用法、链式调用及Promise.resolve的使用方法。此外,还对比了Promise与deferred的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Promise对象

构造函数

var promise = new Promise(function(resolve, reject) {
 // 异步处理 
// 处理结束后、调用resolve 或 reject
 });

用法:


Function getPromise(){
    return new Promise(function(resolve,reject){
        var str=‘new promise’;
console.log(str);
        resolve(str);
}) ;
}
1 
getPromise().then(function fulfilled (value){
    console.log(value);   // --> new promise
},function onRejected(error){
});
2
getPromise().then(function(value){
    console.log(value);   // --> new promise
}).catch(function(error){
})

1和2的写法等价。但2的写法更清楚一些。
当getPromise()返回一个状态为resolve的promise对象时,会执行then()中的onfullfilled函数,如果是reject 状态,就会执行后面的onRecjected 函数(或者是catch中的函数。)
2写法的有一点好处是,then() 执行过后会返回一个新的promise 对象,这样的话如果then函数体中抛出error错误,就会调用到后面的catch()中的函数。
也就是说,catch()可以出来来自getPromise()或者then()两个地方的出错信息。

Promise.resolve(value)

相当于
new Promise(function(resolve){
resolve(‘promise’);
})
用法:
Promise.resolve(42).then(function(value){
console.log(value); //–> 42
})

让promise对象立即进入resolve状态执行then()中的函数,并将resolve中的数据传递给then中的函数。

另一个作用:将thenable对象转换成promise对象
Thenable 是指具有then()方法的对象,向有length属性的类数组对象一样。
jQuery.ajax()返回一个jqXHR Object对象,有then方法。但是他没有catch()方法,转换后就可以使用es 6 中promise对象的方法了。

var promise = Promise.resolve($.ajax(‘/json/comment.json’));// –>
promise对象
promise.then(function(value){ console.log(value); });

Promise.resolve(value) 同步?
以为promise立即进入resolve的状态,给人同步的感觉,但是处理过程还是异步的。因为异步同步同时存在会产生处理混乱,所以同意采用异步方式处理回调函数。

Promise chain

Promise链式调用。

var promise = Promise.resolve(1);
promise
.then(fun1)
.then(fun2)
.catch(fun3)
.then(fun4)

链式调用中,每个then()不仅是注册一个回调函数那么简单,他c创建并产生一个新的promise对象传递给后面的函数,所以说,当某一个then()中的函数抛出了异常,就直接会跳到catch()。但是catch()函数体中的异常还有fun4中的异常是没办法被捕获的。所以catch()放在最后比较好,并且函数体内只做异常的处理,而不要做别的比较好。

Promise 和deferred的区别
Promise代表了一个对象,这个对象的状态现在还不确定,但是未来一个时间点它的状态要么变为正常值(FulFilled),要么变为异常值(Rejected);而Deferred对象表示了一个处理还没有结束的这种事实,在它的处理结束的时候,可以通过Promise来取得处理结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值