Promise

  • 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)