Promise(3) 方法

人没有梦想,跟咸鱼又有什么两样了?一直恐惧读源码,哪怕是一个简单的库也是读百来行遇到难点就放弃了。对于新的东西也仅仅是知道它拿来干什么,社区资源在哪里,要用时就突击文档资源使用即可。未有过深入之心,亦或者有过深入之心两三天就废掉。

这两日安静下来思考,觉得自己毛病不少,却还是不甘于平庸。那么只能选择面对自己做出改变,越是恐惧,越是应该面对。下一篇就来个es6-promise代码理解好了。加油吧少年!

3. Promise 静态方法

Promise.reject()静态方法,这个方法我在才开始用的时候老迷惑了,不知道什么时候应该使用。直到我理解了then方法过后,就不迷惑了,接上一篇。看下图代码:

var aPromise = new Promise(function() {
    resolve(1)
});
var testPromise = aPromise.then(function onFulfilled() {
    //...一系列操作过后得到要传递的value 值
    return value
})

//或者

var aPromise = new Promise(function() {
    reject(1)
});
var testPromise = aPromise.then(null, onRejected() {
    //...一系列操作过后得到要传递的reason 值
    return reason
})

Promise.prototype.then执行它会返回一个新的promise对象,而这个新的promise对象的状态值规则如下:

①var aPromise = new Promise(function(){ resolve(1)}); var testPromise = aPromise.then(null,null)//没有回调函数,新创建的testPromise 对象的[[PromiseStatus]]和[[PromiseValue]]与之前的aPromise 的一样。

②then方法执行的回调函数执行return 值只为普通对象或者原始类型,即将值赋给新创建的promise对象[[PromiseValue]],新创建的promise对象的[[PromiseStatus]]就等于调用then的那个promise对象的[[PromiseStatus]]。

③then方法执行的回调函数执行return值为promise对象,即将promise对象的[[PromiseValue]]和[[PromiseStatus]]赋值给新创建的promise对象对应属性值。

④then方法执行的回调函数执行return值为thenable对象,即执行对象的then方法,根据then方法内部执行resolve或reject确定[[PromiseValue]]和[[PromiseStatus]],赋值给新创建的promise对象对应属性值。

then函数最后调用了onRejected 或者 onFulfilled返回的promise对象需要把rejected状态传递下去(传递给后续进行处理)此时需要使用Promise.reject。(举个例子

// Request.get()是一个发起请求,当有数据返回时生成一个promise对象
// res为后台成功返回的数据,msg为失败或错误返回的数据
Request.get(url).then((res) => {
    if (res.code == 0) {
        //当code的值为0 时判定这个是成功的需要处理的数据
        return res;
    } else {
        //当code的值不为0时,就需要返回一个rejected的promise对象供后续处理
        return Promise.reject(handleError(res));
    }
}, (msg) => {
    //通常是请求出错需要返回一个rejected的promise对象,供后续处理
    return Promise.reject(msg);
});
时间: 2024-11-05 13:38:39

Promise(3) 方法的相关文章

promise使用方法

代码报错会走向失败时的回调 1 let p = new Promise((resolve, reject) => { 2 throw new Error("我错了"); //会失败 3 }) 4 5 p.then((data) => { 6 console.log(data) 7 }, (err) => { 8 console.log(err) // 执行这个方法 9 }) 执行reject会走向失败时的回调 let p = new Promise((resolve,

微信小程序request(promise)方法封装

var Promise = require('es6-promise'); var app = getApp(); function wxPromisify(fn) { return function (obj = {}) { return new Promise((resolve, reject) => { obj.success = function (res) { //成功 resolve(res) } obj.fail = function (res) { //失败 reject(res

promise(3) '静态'方法

一直恐惧读源码,哪怕是一个简单的库也是读百来行遇到难点就放弃了.对于新的东西也仅仅是知道它拿来干什么,社区资源在哪里,要用时就突击文档资源使用即可.未有过深入之心,亦或者有过深入之心两三天就废掉. 这两日安静下来思考,觉得自己毛病不少,却还是不甘于平庸.那么只能选择面对自己做出改变,越是恐惧,越是应该面对.下一篇就来个es6-promise代码理解好了.加油吧少年! 3.1 Promise.reject() Promise.reject()静态方法,这个方法我在才开始用的时候老迷惑了,不知道什么

[Es6]原生Promise的使用方法

参考:https://www.cnblogs.com/imwtr/p/5916793.html 1.new Promise(func) 通过实例化构造函数成一个promise对象,构造函数中有个函数参数,函数参数为(resolve, reject)的形式,供以函数内resolve成功以及reject失败的调用 2..then(onFulfilled, onRejected) then方法,方法带两个参数,可选,分别为成功时的回调以及失败时的回调 3..catch(onRejected) catc

Promise粗解

一.Promise含义.作用.特点 Promise含义 异步编程的一种解决方案: 简单来说就是一个容器,里面保存这某个未来才会结束的事件(异步操作)的结果: 从语法上来讲,是一个对象,可以获取异步操作的消息: Promise作用 可避免回调金字塔式的代码: 优化异步流程: 得到异步流程中的错误: Promise对象的特点 对象的状态不受外界影响 Promise对象代表一个异步操作,用三种状态:pending(进行中).resolve(已完成).reject(已失败),只有异步操作的结果,可以决定

浅析Promise

在JavaScript当中 , 不存在真正的多线程 , 从而导致所有需要异步执行的操作都需要使用回调函数实现 例如 : 使用定时器去执行一个回调函数 function callback(){ console.debug("Time Out!"); } console.log("before"); setTimeout(callback,1000); console.log("after");   定时器会在1秒之后去执行callback这个回调函

promise和Angular中的 $q, defer

在ES6语法中,新出了promise构造函数, 可用来生成promise实例. Promise对象: 代表了未来某个将要发生的事件(通常是一个异步操作).有了promise对象, 可以将异步操作以同步的流程表达出来, 避免了层层嵌套的回调函数(俗称'回调地狱'). 在Angularjs中,对象deferred 实例也可以暴露派生的Promise 实例.以下将对此作简单描述: 1. $q: $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(

Javascript异步编程之三Promise: 像堆积木一样组织你的异步流程

这篇有点长,不过干货挺多,既分析promise的原理,也包含一些最佳实践,亮点在最后:) 还记得上一节讲回调函数的时候,第一件事就提到了异步函数不能用return返回值,其原因就是在return语句执行的时候异步代码还没有执行完毕,所以return的值不是期望的运算结果. Promise却恰恰要回过头来重新利用这个return语句,只不过不是返回最终运算值,而是返回一个对象,promise对象,用它来帮你进行异步流程管理. 先举个例子帮助理解.Promise对象可以想象成是工厂生产线上的一个工人

【javascript】异步编年史,从“纯回调”到Promise

异步和分块——程序的分块执行 一开始学习javascript的时候, 我对异步的概念一脸懵逼, 因为当时百度了很多文章,但很多各种文章不负责任的把笼统的描述混杂在一起,让我对这个 JS中的重要概念难以理解, “异步是非阻塞的”, “Ajax执行是异步的”, "异步用来处理耗时操作"....  “可异步到底是什么?” 后来我发现,其实理解异步最主要的一点,就是记住: 我们的程序是分块执行的. 分成两块, 同步执行的凑一块, 异步执行的凑一块,搞完同步,再搞异步 废话不多说, 直接上图: