Promise

作者: 我就是L | 来源:发表于2017-03-11 17:25 被阅读17次
    • Promise一但新建(new)便立即执行,不能中途取消;如果内部不reject外部不捕获则错误不会反应到外部;无法得知当前Promise状态。

    • Promise实例生成以后,可以用then方法分别指定Resolved状态和Reject状态的回调函数

    promise.then(function(data){},function(err){})
    
    • promise新建后立即执行,而then方法会把callback放倒本轮事件循环结束执行
    let promise = new Promise(function(resolve, reject) {
        console.log('Promise');
        resolve();
    });
    
    promise.then(function() {
        console.log('Resolved.');
    });
    
    console.log('Hi!');
    
    //Promise
    //Hi!
    //Resolved.
    
    • Promise.prototype.then
      返回一个的promise实例

    • Promise.prototype.catch
      既可以捕获异步方法中reject的err,同时then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。也是返回新Promise对象

    • Promise对象的错误具有冒泡特性,总会向后传递。

    • 跟传统的try/catch代码块不同的是,如果没有使用catch方法指定错误处理的回调函数,Promise对象抛出的错误不会传递到外层代码,即不会有任何反应

    var someAsyncThing = function () {
        return new Promise(function (resolve, reject) {
            // 下面一行会报错,因为x没有声明
            resolve(x + 2);
        });
    };
    
    someAsyncThing().then(function () {
        console.log('everything is great');
    });
    
    • 上面代码中,Promise 指定在下一轮“事件循环”再抛出错误,结果由于没有指定使用try...catch语句,就冒泡到最外层,成了未捕获的错误。因为此时,Promise的函数体已经运行结束了,所以这个错误是在Promise函数体外抛出的。
    var promise = new Promise(function(resolve, reject) {
      resolve('ok');
      setTimeout(function() { throw new Error('test') }, 0)
    });
    promise.then(function(value) { console.log(value) });
    // ok
    // Uncaught Error: test
    

    相关文章

      网友评论

        本文标题:Promise

        本文链接:https://www.haomeiwen.com/subject/huwagttx.html