我不知道的promise

  • 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))
    
posted @ 2017-04-04 22:03  南山老幺  阅读(209)  评论(0编辑  收藏  举报