专栏首页Super 前端Promise 常用API

Promise 常用API

1. Promise#then

promise.then(onFulfilled, onRejected);

示例:Promise#then

var promise = new Promise(function(resolve, reject) {
    resolve("传递给then的值");
});
promise.then(function(value) {
    console.log(value);
}, function(error) {
    console.error(error);
});

这段代码创建一个promise对象,定义了处理onFulfilled和onRejected的函数(handler),然后返回这个promise对象。这个promise对象会在变为resolve或者reject的时候分别调用相应注册的回调函数。 (1)当handler返回一个正常值的时候,这个值会传递给promise对象的onFulfilled方法。 (2)定义的handler中产生异常的时候,这个值则会传递给promise对象的onRejected方法。

2. Promise#catch

promise.catch(onRejected); 

等价于promise.then(undefined, onRejected) 的语法糖。 示例:Promise#catch

var promise = new Promise(function(resolve, reject) {
    resolve("要传递给then的值");
});
promise.then(function(value) {
    console.log(value);
}).catch(function(error) {
    console.log(error);
});

3. Promise.resolve

Promise.resolve(promise);
Promise.resolve(thenable);
Promise.resolve(object);

示例:Promise.resolve

var taskName = "task1";
asyncTask(taskName).then(function(value) {
    console.log(value);
}).catch(function(error) {
    console.error(error);
});
function asyncTask(name) {
    return Promise.resolve(name).then(function(value) {
        return "Done! " + value;
    })
}

根据接收到的参数不同,返回不同的promise对象。 (1)接收到promise对象参数的时候:返回的还是接收到的promise对象 (2)接收到thenable类型的对象的时候:返回一个新的promise对象,这个对象具有一个 then 方法 (3)接收的参数为其他类型的时候(包括JavaScript对或null等):返回一个将该对象作为值的新promise对象

4. Promise.reject

Promise.reject(object)

示例:Promise.reject

var r = Promise.reject(new Error("error"));
console.log(r === Promise.reject(r));       // false

var r = Promise.resolve("test");
console.log(r === Promise.resolve(r));      // true

和 Promise.resolve不同的是,即使Promise.reject接收到的参数是一个promise对象,该函数也还是会返回一个全新的promise对象。

5. Promise.all

Promise.all(promiseArray)

示例

var p1 = Promise.resolve(1),
    p2 = Promise.resolve(2),
    p3 = Promise.resolve(3);
Promise.all([p1, p2, p3]).then(function(results) {
    console.log(results);       // [1, 2, 3]
});

生成并返回一个新的promise对象。 参数传递promise数组中所有的promise对象都变为resolve的时候,该方法才会返回, 新创建的promise则会使用这些promise的值。 如果参数中的任何一个promise为reject的话,则整个Promise.all调用会立即终止,并返回一个reject的新的promise对象。

6. Promise.race

Promise.all(promiseArray)

示例

var p1 = Promise.resolve(1),
    p2 = Promise.resolve(2),
    p3 = Promise.resolve(3);
Promise.all([p1, p2, p3]).then(function(results) {
    console.log(results);       // 1
});

生成并返回一个新的promise对象。 参数 promise 数组中的任何一个promise对象如果变为resolve或者reject的话, 该函数就会返回,并使用这个promise对象的值进行resolve或者reject。

参考地址:JavaScript Promise迷你书(中文版)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Promise

    注意:Node.js等规定在JavaScript的回调函数的第一个参数为 Error 对象,这也是它的一个惯例。

    奋飛
  • vue-loader&vue-template-compiler详解

    在 vue 工程中,安装依赖时,需要 vue 和 vue-template-compiler 版本必须保持一致,否则会报错。

    奋飛
  • vue组件引用传值的最佳实践

    所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父...

    奋飛
  • Promise杂记 前言APIPromise特点状态追随V8中的async await和Promise实现一个Promise参考

    作为一个前端开发,使用了Promise一年多了,一直以来都停留在API的调用阶段,没有很好的去深入。刚好最近阅读了V8团队的一篇如何实现更快的async awa...

    菜的黑人牙膏
  • 《你不知道的JavaScript》:ES6 Promise API 详解

    new Promise(…) 构造器的参数必须提供一个函数回调。这个回调是同步的或者立即调用的。这个函数又接受两个函数回调参数,用以支持promise的决议。通...

    前端_AWhile
  • ES6系列_14之promise对象的简单使用

    在前端开发中,最常见的的就是"回调",我相信很多人对于这个"回调"可谓是印象深刻呢。究其原因是因为层层回调会造成所谓的“回调地狱 (callback hell)...

    wfaceboss
  • JS原生引用类型解析7-Promise类型

    ES6引入了一个全新的对象Promise,用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。Promise最直接的好处就是链式调用,另外在错误捕获上...

    love丁酥酥
  • 手写一个Promise/A+,完美通过官方872个测试用例

    前段时间我用两篇文章深入讲解了异步的概念和Event Loop的底层原理,然后还讲了一种自己实现异步的发布订阅模式:

    蒋鹏飞
  • 这一次,彻底弄懂 Promise 原理

    Promise 必须为以下三种状态之一:等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)。一旦Promise 被 resolv...

    winty
  • ES6 Promise

    Promise 的状态只有两种可能,从 pending 变为 fulfilled 和 从 pending 变为 rejected,一旦状态变化,就不会再改变

    Leophen

扫码关注云+社区

领取腾讯云代金券