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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区...
    夜幕小草阅读 2,160评论 0 12
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 3,407评论 0 19
  • Promise的含义:   Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和...
    呼呼哥阅读 2,215评论 0 16
  • 本文适用的读者 本文写给有一定Promise使用经验的人,如果你还没有使用过Promise,这篇文章可能不适合你,...
    HZ充电大喵阅读 7,353评论 6 19
  • 一。关于买衣服。 不知道亲爱的朋友们。今年夏天。你们买了几件衣服了。反正我已经买了两件日常短袖了。说好的攒钱理财然...
    璐格格阅读 542评论 0 1