美文网首页
ES6 Promise对象

ES6 Promise对象

作者: BSKSdorica | 来源:发表于2021-01-25 15:52 被阅读0次

Promise含义

Promise,是一个对象,从它可以获取异步操作的消息。(异步操作不懂的自行查阅)。
特点:1)对象的状态不受外界影响。三种状态pending(进行中),fulfilled(已成功),rejected(已失败),只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。
Promise状态改变的可能:pending-->fulfilled ,pending-->rejected。只要这两种情况发生,会一直保持这个结果,称之为resolved(已定型)。

基本用法

const promise = new Promise(function(resolve,reject){
...
if(//异步操作成功){
resolve(value);
}else{
reject(error);
}
});

Promise简单例子

function timeout(ms) {
return new Promise((resolve, reject) => {
console.log("promise");
setTimeout(resolve, ms, 'done');
});
}
timeout(1000).then((value) => {
console.log(value);
});
console.log("111");
//promise
//111
//done
解析:timeout方法返回的是一个Promise实例,setTimeout传的参数为1000,表示1秒后,Promise实例状态变为resolved,触发then绑定的回调函数。then方法的回调函数在当前脚本所有同步任务执行完才会执行,所以done最后输出。

注意:调用resolve或reject后,Promise的使命就完成了,继续操作应放在then里面,所以我们可以在前面加上return语句。

Promise.prototype.then()

then方法是定义在原型对象Promise.prototype上的,作用是为 Promise 实例添加状态改变时的回调函数。
then方法返回的是一个新的Promise实例。
then方法后面再调用另一个then方法。(这些概念性的知道就ok了)
例:
...().then(function(a){
return a.b;
}).then(function(b){
...
});//可以使用箭头函数,让代码更简洁。
第一个回调函数完成后,将返回的结果作为参数传入第二个回调函数。
如果前一个回调函数返回的是一个Promise对象,这时,后一个回调函数需要等待Promise对象状态发生变化才会被调用。

Promise.prototype.catch()

用于指定发生错误时的回调函数。
用法:
const promise = new Promise(function(resolve,reject){
reject(new Error('err')); //等同于try-catch抛出错误
});
promise.catch(function(err){
console.log(err);
});
注意:1.如果在resolve语句后面抛出错误,不会被捕获,等于没有抛出。
2.Promise对象的错误具有冒泡性质,会一直传递直到捕获为止。
....then(...).then(...).catch(...//处理前三个Promise产生的错误);
3.如果不使用catch方法,抛出的错误不会传递到外层代码,即不会有任何反应。
4.catch方法返回的还是一个 Promise 对象,因此后面还可以接着调用then方法,如果没有报错,会跳过catch方法,接着运行后面的then方法。如果catch方法报错,我们可以接着用catch方法捕获前一个catch方法抛出的错误。

Promise.prototype.finally()

finally方法里的代码都会被执行。
用法:promise.then(result=>{...}).catch(err=>{...}).finally(()=>{...});

Promise.reject()

用法:const p = Promise.reject("err");
p.then(err=>{
console.log(err);
})

相关文章

  • Promise对象原理解析

    Promise对象原理解析 ES6 原生提供了 Promise 对象。所谓 Promise,就是一个对象,用来传递...

  • Promise.done(),Promise.finally()

    es6 Promise.done(),Promise.finally()promise对象的finally函数为什...

  • ES6--Promise

    学过ES6的同学大概都知道Promise,可想而知Promise在ES6中很重要。 Promise对象代表了未来将...

  • ECMAScript 6 Promise

    ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。 Promise对象有以下两个特点。 ...

  • ES6 Promise 对象

    参考文档: 《ECMAScript 6 入门》:Es6 APi Promise对象 《Es6 Prom...

  • 教你如何使用ES6的Promise对象

    Promise对象,ES6新增的一个全新特性,这个是 ES6中非常重要的一个对象 Promise的设计初衷 首先,...

  • Promise 特性整理总结及心得用法

    Promise对象 特性 Promise为es6标准语法,主要用于解决异步回调问题,Promise 对象可分为三种...

  • ES6必知必会 (五)—— Promise 对象

    Promise 对象 1.Promise对象是ES6对异步编程的一种解决方案,它有以下两个特点: Promise对...

  • Promise

    es6中有个特别的对象Promise,今天我们就来学习它,了解它。 Promise含义 Promise 是异步编程...

  • Promise简单使用

    ES6原生提供了Promise对象。所谓Promise,就是Node中的一个对象,用来传递异步操作的消息。 Pro...

网友评论

      本文标题:ES6 Promise对象

      本文链接:https://www.haomeiwen.com/subject/sfzszktx.html