资讯专栏INFORMATION COLUMN

promise学习(2)

firim / 695人阅读

摘要:所谓的能对状态进行操作的特权方法,指的就是能对对象的状态进行等调用的方法,而通常的的话只能在通过构造函数传递的方法之内对对象的状态进行操作。一般会在构造函数中编写逻辑,什么时候执行回调,什么时候执行回调。

原文地址

1. 在then中使用reject
如果一个promise最初只定义了resolve,但是还想要使用reject怎么办?

可以在then中返回一个新的promise。这个retPromise 对象状态为Rejected的时候,会调用后面then中的 onRejected 方法,这样就实现了即使在then 中不使用 throw 也能进行reject处理了。

var onRejected = console.error.bind(console);
var promise = Promise.resolve();
promise.then(function () {
    var retPromise = new Promise(function (resolve, reject) {
       reject(new Error("this promise is rejected"));
    });
    return retPromise;
}).catch(onRejected);
// 使用Promise.reject还可以简化书写
var onRejected = console.error.bind(console);
var promise = Promise.resolve();
promise.then(function () {
    return Promise.reject(new Error("this promise is rejected"));  // 注意 Promise.reject其实只是new Promise的简洁写法   作用是一样的
}).catch(onRejected);

如果想直接更改promise的状态,那么使用reject()比使用throw要安全。 如果直接使用throw,就不太容易区分是主动抛出的error,还是代码中的error

2. Deferred和Promise之间的关系

(以jquery.deferred类似实现为例)

deferredpromise不是竞对,deferred包含promisedeferred具备对promise状态进行操作的特权方法。

所谓的能对Promise状态进行操作的特权方法,指的就是能对promise对象的状态进行resolvereject等调用的方法,而通常的Promise的话只能在通过构造函数传递的方法之内对promise对象的状态进行操作。

Promise 一般会在构造函数中编写逻辑,什么时候执行fulfilled回调,什么时候执行rejected回调。但是deferred只要定义一个对象之后,可以在任意时间调用resolve或者reject方法。

deferred最后返回return deferred.promise 可以继续链式调用。

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

3. thenable对象

thenable对象可以通过Promise.resolve转化成Promise对象。thenable对象就是一个具有 .then方法的一个对象。那么普通的callback也可以通过添加then方法变成thenable对象,这个转换过程是在resolve中进行的,转换中添加的then方法与后面使用 .then异步执行回调的then不是同一回事。

Todos:

promise 任务队列原理

promise扩展库是如何获取promise的状态以及取消promise动作的

promise反模式

4. 学习方法

学习之前要对所学的东西有个总体上的计划和步骤,有条理有重点的去开展。边学习边记录的方法虽然也没错,但是当你看完之后发现知识点都是零散的,也还是需要整理汇总。

由点到面再到点,这样后续总结回顾的时候也能够很清楚的找到重点和难点。

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

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

相关文章

  • Promise源码学习2

    摘要:源码学习本篇为上一篇源码学习的补充,主要是来介绍和方法。那个率先改变的实例的返回值,就传递给的回调函数。基本介绍可见阮一峰老师的书籍。的状态由决定,分成两种情况。只有的状态都变成,的状态才会变成,此时的返回值组成一个数组,传递给的回调函数。 Promise源码学习(2) 本篇为上一篇源码学习(1)的补充,主要是来介绍Promise.all()和Promise.race()方法。闲话少叙...

    cfanr 评论0 收藏0
  • 嗨,了解一下,我的Promise学习笔记

    摘要:回调函数成功回调处理器失败回调处理器用户发送一个向百度服务器获取数据的异步请求无阻塞高并发的的诞生更加严重的依赖异步操作才能完成无阻赛高并发的特性。 Promise Promise 是什么? 词语本意: 发音:[ˈprɒmɪs] 词性:名词, 翻译:许诺,允诺。 MDN解释 Promise 对象用于一个异步操作。 一个Promise表示一个现在,将来或永不可能可用的值。 按照书写方...

    yanest 评论0 收藏0
  • 深入学习Promise调用链

    摘要:前言使用中,链式的调用对于控制异步执行很重要。的链式调用是支持链式调用的,但是它是不同于上面的链式。是调用方法返回自身,但是是调用方法后返回一个新的。的运行机制请参考的运行机制值穿透由于通过没有成功添加回调函数,发生了值穿透。 前言 使用Promise中,链式的调用对于控制异步执行很重要。 链式调用 在jQuery的使用中,我们常常使用下面的代码 $(#app).show().css(...

    tianren124 评论0 收藏0
  • Promise源码学习(1)

    摘要:工作当中经常会用到,在此进行深入学习异步编程解决方案是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理和更强大。所有源码注释见学习笔记 工作当中经常会用到Promise,在此进行深入学习 异步编程解决方案 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了...

    young.li 评论0 收藏0
  • promise学习(3)

    摘要:此时,由于只有一个的状态能够确定,所以执行的是唯一那个确定状态的函数,而不会执行其他的,但是并不会阻止其他的执行。在实际应用中,常用来设置超时操作,比如接口请求超时等。思考这个其实并不是矛盾,接受的是返回的的状态,与原来的没有关系。 原文地址 Promise.race // `delay`毫秒后执行resolve function timerPromisefy(delay) { ...

    阿罗 评论0 收藏0

发表评论

0条评论

firim

|高级讲师

TA的文章

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