博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
chapter1.7、Promise
阅读量:6239 次
发布时间:2019-06-22

本文共 2679 字,大约阅读时间需要 8 分钟。

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) // 状态pendingmyPromise.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

then

catch:

 

转载于:https://www.cnblogs.com/rprp789/p/9975869.html

你可能感兴趣的文章