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! // resolvedPromise.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的执行结果。
上述文章,如有错误,还请指正,谢谢!!!
参考当前文章:
发布时间:2018-03-29 00:28:11