当状态为rejected时,会执行catch方法。当执行体中出现错误时也会执行catch方法。constp=newPromise(function(resolve,reject){reject();});p.catch(function(){console.log("出错了!");});constp=newPromise(function(resolve,reject){console.log(a);//没有a这个变量,出错也会执行catch方法});p.catch(function(){console.log("出错了!");});这样就可以不用在then中写两个回调函数了,可以用将then用作于成功状态的回调函数,将catch用作于失败状态的回调函数,由于他们返回的是Promise对象,所以可以链式调用。
then方法是Promise原型对象中的方法,可以通过Promise实例对象调用。参数:then方法一共有两个参数,这两个参数都是函数,其实就是resolve()和reject()的回调函数。当Promise状态为fulfilled时,执行第一个函数(resolve)。当Promise状态为rejected时,执行第二个函数。(reject)返回值:then的返回值是一个Promise对象。获取数据:首先要从resolve()或者reject()中写好实参,然后该对象的then方法中对应的回调函数会接收形参。constp=newPromise(function(resolve,reject){resolve(data);//例如这里是文件中的数据reject(err);//这里就是读取文件失败的错误信息});p.then(function(value){console.log(value);//这里就是传过来的data数据},function(err){console.log(err);//这里就是传过来的err错误信息});注意:如果Promise对象的状态是pending(也就是没有调用resolve和reject),那么它实例的then方法是不会执行的。返回实例的状态改变:then方法返回的是一个Promise对象,它默认是一个pending状态,也就是说不会执行。可以通过return关键字可以将状态改为fulfilled。constp=newPromise(function(resolve,reject){resolve("成功调用");//改变该对象的状态,否则不会执行then方法//reject("失败调用");});constt=p.then(function(data){console.log(data);//输出resolve的实参//t现在的状态是pending状态,那么t的then方法是不会执行的returndata;//通过return改变t的状态,而这里return的值会被t实例中的then接收。},function(err){console.log(err);returnerr;//当p实例失败时,调用reject,才会执行这里,否则不会执行这里。});t.then(function(data){console.log("成功",data);},function(err){console.log("失败",err);});如果代码出错时,会将then方法返回的实例的状态修改为rejected。链式调用:当前then函数return的结果,可以被下一个then中的第一个function参数接收到。如果return的是一个变量,接收到的就是变量值。如果return的是一个Promise对象,那么后面then中的回调函数就是return传递过来Promise对象中的resolve函数。
为了解决回调地狱这个问题,在ES6中增加了一个API:Promise。0x01简介:Promise是一个构造函数,通过new关键字实例化对象。参数:Promise需要接收函数作为参数。该函数中又有两个参数:resolve和reject,这两个参数都是回调函数。resolve:成功函数reject:失败函数实例:varp=newPromose(function(resolve,reject){//代码体});console.log(p);//实例的两个属性//[[PromiseState]]:"pending"---状态//[[PromiseResult]]:undefined---结果实例的属性:Promise实例有两个属性。state:状态第一种状态:pending(准备、待解决、进行中)。第二种状态:fulfilled(已完成、成功)。第三种状态:rejected(已拒绝、失败)。result:结果。Promise状态的改变:通过调用resolve()和reject()可以改变当前Promise对象的状态。Promise状态改变是一次性的,如果先调用了resolve(),后面又调用了reject(),那么它的状态还是fufilled。调用resolve-使状态变成fufilled:constp=newPromise(function(resolve,reject){resolve();});调用reject-使状态变成rejected:constp=newPromise(function(resolve,reject){reject();});Promise的结果:可以在resovle()和reject()中添加参数,该参数会修改当前Promise对象的结果,并且该参数会传递给then方法中相应的回调函数作为形参。constp=newPromise(function(resolve,reject){resolve("成功的结果!");//reject("失败的结果!");});
find()和findIndex():简介:这两个方法是ES6中新出的语法,是针对数组查找的。find():该方法是遍历数组元素的,通过条件判断,返回条件成立的遍历项。如果遍历完所有元素,都不符合条件,就返回undefined。vararr=[1,2,3,4];varret=arr.find(function(value){returnvalue===4;});console.log(ret);//4findIndex():该方法和find方法差不多,如果该正在遍历的该元素,符合条件,则返回这个元素的索引值。vararr=[1,2,3,4];varret=arr.findIndex(function(value){returnvalue===1;});console.log(ret);//0