异步和Promise

 

异步与同步:

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式,指后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。  

 

Promise 是在 j s 中进行异步编程的新解决方案。从语法上来讲,Promise是一个对象,从它可以获取异步操作的消息。

具体来说,Promise其实是一个构造函数,它有resolve,reject,race等静态方法;它的原型(prototype)上有then,catch方法。

而方法的使用和promise的状态也有很大关系,promise有三种状态:

pending: 初始状态,成功或失败状态。
fulfilled: 意味着操作成功完成。
rejected: 意味着操作失败。

调用resolve方法时,Promise的状态就变成fulfilled,即操作成功状态
调用reject方法后,Promise状态变为rejected,即操作失败状态,此时执行then方法里面onrejected操作
then方法里面有两个参数onfulfilled(Promise为fulfilled状态时执行) 和 onrejected(Promise为rejected状态时执行)
catch其实跟then方法中的第二个参数一样,就是在Promise状态为rejected时执行,then方法捕捉到Promise的状态为rejected,就执行catch方法里面的操作。

下面用一段代码进行展示:

var p = new Promise(function (resolve, reject) {
            var timer = setTimeout(function () {
                console.log('执行操作1');
                resolve('这是数据1');
            }, 1000);
        });
        p.then(function (data) {
            console.log(data);
            console.log('这是成功操作');
        });

下面是代码的效果图:

最后总结promise的优点与缺点:

优点:

(1)解决回调地狱问题 ,有时我们要进行一些相互间有依赖关系的异步操作,比如有多个请求,后一个的请求需要上一次请求的返回结果。

(2)更好地进行错误捕获

缺点:

(1)无法取消Promise,一旦新建它就会立即执行,无法中途取消。

(2)如果不设置回调函数,promise内部抛出的错误,不会反应到外部。

(3)当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

posted @ 2022-05-08 11:46  Lhaoyu  阅读(96)  评论(0编辑  收藏  举报