-
promise在resolve之后 再抛出错误并不会被捕获,等于没有抛出,个人理解是状态改变之后就不会再次改变。
-
错误具有冒泡的特性,会一直向后传递,直到被捕获为止,但是不会冒泡到全局。跟传统的try catch 语句不同的是,如果没有使用catch 语句指定错误处理的回调函数,promise 对象抛出的错误不会传递到外层代码
-
Catch方法返回的还是一个promise 对象,因此后面还可以接着调用then方法,如果没有报错则跳过该catch 方法,需要注意的是,如果在catch 语句以后再抛出错误则无法捕获。
-
done 方法总是出于回调链的微端,保证抛出任何可能出现的错误(向全局)
-
值穿透:如果在then方法或是catch方法中传入的不是函数则会穿透,像是没有传入。
-
实现并行,不好的做法是使用forEach遍历执行promise,可以使用Promise.all
getAsyncArr().then(promiseArr => { return promise.all(promiseArr); }) .then(res => console.log(res))
-
实现串行执行,那我们可以利用reduce来处理串行执行
var pA = [ function() {return new Promise(resolve => resolve(1))}, function(data) {return new Promise (resolve(1 + data))} ] pA.reduce((prev, next) => prev.then(next).then(res=>res), Promise.resolve()).then(res => console.log(res))