-
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
网友评论