AJax技术

从JavaScript的事件循环到Promise(2)

字号+ 作者:H5之家 来源:H5之家 2018-03-29 10:03 我要评论( )

Promise.resolve()和Promise.reject()是手动创建一个已经resolve或者reject的promise快捷方法。通常,我们可以使用Promise.resolve()去链式调用一个由异步函数组成的数组。例如: Promise.resolve().then(func1).th

Promise.resolve()和Promise.reject()是手动创建一个已经resolve或者reject的promise快捷方法。通常,我们可以使用Promise.resolve()去链式调用一个由异步函数组成的数组。例如:

Promise.resolve().then(func1).then(func2);

Promise.all()和Promise。race()是并行运行异步操作的两个组合式工具。

Promise.then()方法用来分别指定resolved状态和rejected状态的回调函数。传递到then中的函数被置入了一个微任务队列,而不是立即执行,这意味着它是在JavaScript事件队列的所有运行结束了,事件队列被清空之后才开始执行

let promise = new Promise(function(resolve, reject) { console.log("Promise"); resolve(); }); promise.then(function() { console.log("resolved."); }); console.log("Hi!"); // Promise // Hi! // resolved

Promise.then()方法返回一个Promise,它最多需要有两个参数:Promise的成功和失败情况的回调函数。

p.then(onFulfilled, onRejected); p.then(function(value) { // fulfillment }, function(reason) { // rejection });

onFulfilled:当Promise变成接受状态(fulfillment)时,该参数作为回调函数被调用。该函数有一个参数,即接受的值。

onRejected:当Promise变成拒绝状态时,该参数作为回调函数被调用。该函数有一个参数,即拒绝的原因。

Promise的状态一旦改变,就永久保持该状态,不会再改变了。

Promise中的错误处理

一般的情况,我们会在每次的Promise中抛出错误,在Promise中的then函数中的rejected处理函数会被调用,这是我们作为错误处理的常用方法:

let p = new Promise(function(resolve,reject){ reject("error"); }); p.then(function(value){ success(value); },function(error){ error(error) } )

但是一种更好的方式是使用catch函数,这样可以处理Promise内部发生的错误,catch方法返回的还是一个Promise对象,后边还可以接着调用then方法。而且catch方法尽量写在链式调用的最后一个,避免后边的then方法的错误无法捕获。

let p = new Promise(function(resolve,reject){ reject("error"); }); p.then(funct周鸿祎_蜘蛛资讯网ion(value){ success(value); }).catch(function(error){ console.log("error"); }}

Promise.finally()函数,该方法是ES2018引入标准的。指定不管Promise对象最后状态如何,都会执行的操作。finally方法的回调函数不接受任何参数,这意味着没有办法知道,前面的Promise状态到底是fulfilled还是rejected。这标明,finally方法里面的操作,是与状态无关的,不依赖于Promise的执行结果。

上述文章,如有错误,还请指正,谢谢!!!

参考
  • 阮一峰老师的ES6
  • MDN中的Promise
  • 当前文章:

    发布时间:2018-03-29 00:28:11


     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    网友点评