ES6 的 Promise 对象

$.ajax({

url: ‘......‘,

success: function (data) {

$.ajax({

// 要在第一个请求成功后才可以执行下一步

url: ‘......‘,

success: function (data) {

// ......

}

});

}

});

当执行一些异步操作时,我们需要知道操作是否已经完成,当执行完成的时候会返回一个回调函数,表示操作已经完成。 再继续进行下一个接口请求。。。。。

回调函数的形式在实际的应用当中会有以下的缺点:

在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观。

如果几个异步操作之间并没有前后顺序之分(例如不需要前一个请求的结果作为后一个请求的参数)时,同样需要等待上一个操作完成再实行下一个操作。

为了解决上述的问题,Promise 对象应运而生

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。一个允诺对象有三种状态,

Padding阶段 表示状态在进行

Resolved阶段 表示状态成功的结束

Rejected阶段 表示状态失败的结束

在允诺对象中只有两个两个执行的方向

一个是从padding状态进入resolved状态,表示异步操作成功执行完毕

一个是从padding状态进入rejected状态,表示异步操作失败执行完毕

Promise对象是一个构造函数,用来生成Promise实例。

var promise = new Promise(function(resolve, reject) {

// ... some code

if (/* 异步操作成功 */){

resolve(value);

} else {

reject(error);

}

});

Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。

resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 Pending 变为 Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;

reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 Pending 变为 Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

promise.then(function(value) {

// success

}, function(error) {

// failure

});

Promise实例生成以后,可以用then方法分别指定Resolved状态和Reject状态的回调函数。

then方法可以接受两个回调函数作为参数。

第一个回调函数是Promise对象的状态变为Resolved时调用,

第二个回调函数是Promise对象的状态变为Rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。

允诺对象内部的状态不会受到外部的干扰,只有其内部改动才会改变状态

因此我们无法或者允诺对象当前处在哪个状态,

允诺对象一旦状态改变定义的允诺就会执行

Promise.all可以注册多个允诺对象,

当所有的允诺对象都执行成功时候会,成功回调函数才会执行

当遇到一个失败的就会立即执行失败的回调函数

function helloWorld (ready) {

return new Promise(function (resolve, reject) {

if (ready) {

resolve("Hello World!");

} else {

reject("Good bye!");

}

});

}

helloWorld(true).then(function (message) {

console.log(message);

}, function (error) {

console.log(error);

});

//Hello World!

helloWorld(true).then(function (message) {

console.log(message);

}, function (error) {

console.log(error);

helloWorld(false).then(function (message) {

console.log(message);

}, function (error) {

console.log(error);

});

// Good bye!

helloWord 函数接受一个参数,如果为 true 就打印 "Hello World!",如果为 false 就打印错误的信息。helloWord 函数返回的是一个 Promise 对象。

通过then方法可以定义诺言,两个参数

第一个参数定义成功时候的回调函数resolved状态

作用域是window

参数是执行resolve方法时候传递参数

第二个参数定义失败时候的回调函数rejected状态

作用域是window

参数是执行reject方法时候传递参数

Promise.all()
Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
var p = Promise.all([p1, p2, p3]);
Promise.all方法接受一个数组作为参数,p1、p2、p3都是 Promise 实例

时间: 2024-10-26 14:10:30

ES6 的 Promise 对象的相关文章

ES6 - promise对象

Promise的设计初衷 我们使用ajax请求数据,得到数据后再对数据进行操作,可是有时候,对得到的数据进行操作的过程中,可能又要用到ajax请求,这时,我们的代码就变成了这样: $.ajax({ success:function(res1){ //...请求B开始,B依赖A返回的数据 $.ajax({ sucess:function(res2){ //...请求C开始,C依赖B返回的数据 $.ajax({ sucess:function(res3){ } }); } }); } }); 这种写

ES6的promise对象应该这样用

ES6修补了一位Js修真者诸多的遗憾. 曾几何时,我这个小白从js非阻塞特性的坑中爬出来,当我经历了一些回调丑陋的写法和优化的尝试之后,我深深觉得js对于多线程阻塞式的开发语言而言,可能有着其太明显的缺点,而又无法忽略的是也正因为这一点,node.js处理并行的能力被人看作优点,在我看来,这其实有着些讽刺的意味,就好像踢足球时有的人总夸你腿短,所以频率快下盘稳好控球...好在js从出生以来就有一种独特的特质,就是模仿,对,就是模仿,模仿别人的优点来补足自己,同时保持自己的长处. ES6就是通过P

es6 之 promise 对象

异步编程 传统方案:事件 + 回调函数 ES6 的新方案:Promise 对象 Promise 异步操作有 3 种状态 pending: 进行中 resolved: 已完成 rejected: 已失败 Promise 异步操作的状态变化仅限下面两种方式 pending –> resolved pending –> rejected 创建一个 Promise 实例: promise 构造函数接收一个函数作为参数,并且这个函数有两个参数,这两个参数是也是两个函数,不过这两个函数由 JavaScri

ES6中Promise对象个人理解

Promise是ES6原生提供的一个用来传递异步消息的对象.它减少了传统ajax金字塔回调,可以将异步操作以同步操作的流程表达出来使得代码维护和可读性方面好很多. Promise的状态: 既然是用来传递异步消息的那肯定就会有异步消息的状态:所以promise提供了3种状态:pending(进行中),resolved(已完成或者称 fulfilled),rejected(失败).不同的是Promise不会受外界影响,只有异步操作结果才能决定当前是哪种状态,任何其他非异步操作都不能改变.所以当状态发

ES6知识点-Promise对象

4.3Promise对象 4.3.1Promise概述 Promise是异步编程的一种解决方案. Promise是为了解决多重嵌套回调函数而提出的. 它不是新的语法功能,而是一种新的写法,允许将回调函数的嵌套,改成链式调用. Promise是一个对象,从它可以获取异步操作的消息. Promise提供统一的API,各种异步操作都可以用同样的方法进行处理. Promise有以下两个特点: 对象的状态不受外界影响.Promise对象代表一个异步操作,有三种状态:Pending(进行中).Resolve

谈谈 ES6 的 Promise 对象

前言 开篇首先设想一个日常开发常常会遇到的需求:在多个接口异步请求数据,然后利用这些数据来进行一系列的操作.一般会这样去写: $.ajax({ url: '......', success: function (data) { $.ajax({ // 要在第一个请求成功后才可以执行下一步 url: '......', success: function (data) { // ...... } }); } }); 这样的写法的原理是,当执行一些异步操作时,我们需要知道操作是否已经完成,所有当执行

es6学习--promise对象

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. 1.基本用法 Promise对象是一个构造函数,用来生成Promise实例 function timeout(ms){ return new Promise((resolve,reject) =>{ setTimeout(resolve, ms,'done') }) } timeout(100).then((value)=>

ES6 学习 -- Promise对象

1.promise含义:可以将promise对象看成是一个容器,它保存着未来才会结束的某个事件(一般是异步操作事件)的结果,各 种异步操作都可以用promise对象来处理promise的特点:(1)promise对象有三个状态:pending(进行中).fulfilled(已成功)和rejected(已失败),只有异步操作的结果,可 以决定当前是哪一种状态,其他操作无法改变当前状态(2)一旦状态值改变,就不会再变了,任何时候都可以得到这个结果.promise对象的状态改变,只有从pending变

ES6深入学习记录(二)promise对象相关

1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理和强大.ES6将其写进了语言标准,统一了用法,原生提供了promise对象. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步的操作)的结果.从语法上说,Pormise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API.各种异步操作都可以用同样的方法进行处理. Promise对象的两个特点: 1.对象的状态不受外界影响.Promis