Promise的用法

promise.then()、promise.catch()、Promise.all()、、、

Promise 构造函数接受一个函数作为参数,该函数的2个参数分别是 resolve 和 reject。他们是2个函数,有 JavaScript 引擎提供,不用自己部署。

var promise = new Promise ( function ( resolve, reject) {
    if ( /* 异步操作成功 */ ) {
        resolve (value)
    } else {
        reject (error)
    }
})

如果调用 resolve 函数和 reject 函数时带有参数,那么这些参数会被传递给回调函数。

Promise 实例生成以后,可以用 then 方法分别指定 Resolved 状态和 Rejected 状态的回调函数(then 方法的作用是为 Promise 实例添加状态改变时的回调函数)。

promise.then( function (value) {
    // success
}, function (value) {
    // failure
})

Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个 catch 语句捕获。注意:因此无法知道错误是哪个Promise产生的,除非设置了不一样的错误提示。

一般,不要在 then 方法中定义 Rejected 状态的回调函数(即 then 的第二个参数),而应该总是使用 catch。

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

catch 方法返回的还是一个 Promise 对象,因此还可以接着调用 then 方法。

如果没有报错,则会跳过 catch 方法,继续执行后面的 then 方法(如果后面还有 then 方法的话)。

getJson (‘/post/1.json‘).then ( function (post) {
    return getJson(post.commentURL)
}).then ( function (comments) {
    // some code
}).catch ( function (error) {
    // 处理前面3个 Promise 产生的错误
})

var p = Promise.all([p1, p2, p3])

p的状态有 p1、p2、p3 决定,分成2种情况:

1. 只有 p1、p2、p3 的状态都变成 Fulfilled,p 的状态才会变成 Fulfilled,此时  p1、p2、p3 的返回值组成一个数组,传递给 p 的回调函数。

2. 只要 p1、p2、p3 中有一个被 Rejected,p 的状态就变成 Rejected,此时第一个被 Rejected 的实例的返回值会传递给 p 的回调函数。

时间: 2024-11-13 06:32:56

Promise的用法的相关文章

整理一下Promise 的用法

Promise 的定义 Pormise是JS的异步编程的一种解决方案,在ES6将其写进了语言标准,提供了原生的Promise对象. Promise简单来理解就是一个容器,里面存放着某个未来才会结束的事件结果.Promise是一个对象,从它可以获取异步操作的消息,Promise提供了统一的API,各种异步操作都可以用同样的方法进行处理. Promise有下面两个特点: 对象的状态不受外界影响.有三种状态:padding(进行中).fulfilled(成功).rejected(失败).只有异步操作的

[js高手之路] es6系列教程 - promise常见用法详解(resolve,reject,catch,then,all,race)

关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下promise的常见用法. 为什么会有promise,他的作用是什么? promise主要是为了解决js中多个异步回调难以维护和控制的问题. 什么是promise? 从图中,我们可以看出,Promise是一个函数,这个函数上有在项目中常用的静态方法:all, race, reject,resolve等,原

ES6 Promise的用法(摘抄)

Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise(function(resolve, reject){    //做一些异步操作    setTimeout(function(){        console.log('执行完成');        resolve('随便什么数据');    }, 2000);}); Promise的构造函数接收

ES6 promise的用法

function runAsync(){ var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000); }); return p; } runAsync() 接下来调用runAsync()方法 runAsync().then((res)=>{ console.log(res); // res:随便什么

promise基础用法

/** * Created by liyinghao on 2016/11/6. */ const fs = require('fs'); /* * 新建一个Promise对象,Promise就是一个容器,里面放置一个异步执行的API * */ const p1 = new Promise((resolve, reject)=>{ fs.readFile('./a.txt','utf8',(err,data)=>{ if(err){ /* * 容器中异步任务失败之后调用reject方法,把错误

promise 基本用法

new Promise((resolve, reject) => { setTimeout(() => {//什麼情況下執行,比方說接口請求成功 resolve({name:'san'}); }, 500);}).then(val => {//成功回調 console.log(val.name);//san}, err => { console.error(err);//报错}); ......... new Promise((resolve, reject) => { co

Promise 的 用法及实现

Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示. 语法 new Promise( function(resolve, reject) { 函数体 }); 在函数体中,调用 resolve 会把状态改为成功 , reject 把状态改为失败,状态只可操作一次. 状态改变之后,会继续执行Promise的then函数 Promise 对象一共有三个状态 ( [[ PromiseStatus ]] ) : pending : 初始状态 fullfilled : 成功 rejec

ES6关于Promise的用法

Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示.简单点说,它就是用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作. 它的一般表示形式为: new Promise( /* executor */ function(resolve, reject) { if (/* success */) { // ...执行代码 resolve(); } else { /* fail */ // ...执行代码 reject(); } } );

[WinJS] Promise 用法

初学 WinJS, 可能对 Promise 的用法不大清楚,本文简要说明一下 WinJS中 promise 的基本用法. 主要参考自:http://try.buildwinjs.com/#promises Promise是 WinJS中实现异步模式编程的实现形式, 它其实更多的是一种规范,用来规范和简化 javascript 中的异步编程. 在promise被提出来之前,javascript中的异步编程通常是直接使用回调来完成的. 1 2 3 4 5 6 7 var getParentList