码迷,mamicode.com
首页 > 其他好文 > 详细

chapter1.7、Promise

时间:2018-11-18 16:09:12      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:resolve   console   out   exec   添加   操作   返回值   value   一个   

Promise

Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。

简单说,就是处理异步请求的。

之所以叫做Promise,就是我承诺,如果成功则怎么处理,失败则怎么处理。

new Promise(
    /* 下面定义的函数是executor */
    function(resolve, reject) {...}
);

executor

executor 是一个带有 resolve 和 reject 两个参数的函数 。

executor 函数在Promise构造函数执行时同步执行,被传递resolve和reject函数(executor 函数在Promise构造函数返回新建对象前被调用)。

executor 内部通常会执行一些异步操作,一旦完成,可以调用resolve函数来将promise状态改成fulfilled即完成,或者在发生错误时将它的状态改为rejected即失败。

如果在executor函数中抛出一个错误,那么该promise 状态为rejected。executor函数的返回值被忽略

executor中,resolve或reject只能执行其中一个函数

Promise的状态

pending: 初始状态,不是成功或失败状态。

fulfilled: 意味着操作成功完成。

rejected: 意味着操作失败

Promise.then(onFulfilled, onRejected)

参数是2个函数,根据Promise的状态来调用不同的函数,fulfilled走onFulfilled函数,rejected走onRejected函数。
then的返回值是一个新的promise对象。调用任何一个参数后,其返回值会被新的promise对象来resolve,向后传递。

var myPromise = new Promise((resolve,reject) => {
    //resolve("ok"); //执行,置状态为fulfilled
    console.log("++++++++++++");
    reject("bad") // 永远执行不到,resolve和reject只能执行其一
    console.log("===============")
});
console.log("myPromise")

myPromise.then(
    (value) => console.log(1,myPromise,value), // 成功,显示结果
    (reason) => console.log(2,myPromise,reason) // 失败,显示原因
)

 

catch(onRejected)

为当前Promise对象添加一个拒绝回调,返回一个新的Promise对象。onRejected函数调用其返回值会被新的Promise对象用来resolve。 

var myPromise = new Promise(function(resolve, reject) {
    setTimeout(() => {
        // resolve("ok"); //执行其一
        reject("not ok") //执行其一
    },1000)
})

console.log(myPromise) // 状态pending
myPromise.then( // 根据Promise的状态,选择走那个函数
    (value) => {
        console.log(1,myPromise,value)
        return value // 如果不return,返回的新promise对象,只是简单地接受了本次promise对象的终态
    },
    (reason) => {
        console.log(2,myPromise,reason)
        return reason
        }
).then(
    function(x) { 
        console.log(x); //x上一个Promise对象返回的值
        return Promise.reject(x +"+++++++")
    }
).catch(x => { // 接收到的是上一个reject的值,在这里被Promise的resolve使用
    console.log(x);
    return Promise.resolve(x)
})

setTimeout函数是一个异步函数,设置的值为要执行的函数和等待时常,2000就是2秒

异步实例

var myPromise = new Promise((resolve,reject) => {
    //resolve("ok"); //执行,置状态为fulfilled
    console.log("++++++++++++");
    reject("bad") // 执行
    console.log("===============")
});
console.log("myPromise")

abc = (myPromise.then(
    (value) => {
        console.log(1,myPromise,value) // 成功,显示结果
        return value
    },
    (reason) => {
        console.log(2,myPromise,reason) // 失败,显示原因
        return reason
    }
).then(
    function (v) {
        console.log(2.5,v)
        return Promise.reject(v + "**")
    }
).catch(reason => {
    console.log(3,reason);
    return Promise.resolve(reason)
}))
setTimeout(() => console.log(100,abc),2000) // 返回的对象仍是promise对象, Promise<"bad**">

参考

Promise

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

then

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

catch:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

 

chapter1.7、Promise

标签:resolve   console   out   exec   添加   操作   返回值   value   一个   

原文地址:https://www.cnblogs.com/rprp789/p/9975869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!