- promise是什么?
- 为什么会有promise?
- promise 是一个对象
- promise详解
- promise有三个状态:
- Promise 解决回调地狱
- Promise 用法
- Promise 概述
- Promise 基本用法
- Promise基于原生ajax发送请求,php并设置跨域
- 基于 Promise 处理Ajax请求
- Promise 常用 API
- 1、实例方法
- 3、 对象方法
- fetch 概述
- 1、基本特性
- 2、语法结构
- 3、fetch 请求参数
- 1、常用配置选项
- 2、GET请求方式的参数传递
- Fetch 的 get 传参
- Fetch 的 delete 传参
- axios 的基本特性
- Get基本应用
- axios 的常用API
- 1、get 传递参数
- 2、delete传递参数
- Post 请求
- axios 响应结果
- ajax中 Uncaught ReferenceError: axios is not defined
- async/await 的基本用法
- Async/await 处理多个异步请求
- 待解决问题
1、主要用于异步计算
2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
3、可以在对象之间传递和操作promise,帮助我们处理队列
为什么会有promise?为了避免界面冻结(任务)
同步: 假设你去了一家饭店,找个位置,叫来服务员,这个时候服务员对你说,对不起我是“同步”服务员,我要服务完这张桌子才能招呼你。
那桌客人明明已经吃上了,你只是想要个菜单,这么小的动作,服务员却要你等到别人的一个大动作完成之后,才能再来招呼你,这个便是同步的问题:也就是“顺序交付的工作1234,必须按照1234的顺序完成”。
异步: 则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作。 等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。 AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。
有了nodeJS之后… 对异步的依赖进一步加剧了
大家都知道在nodeJS出来之前PHP、Java、python等后台语言已经很成熟了,nodejs要想能够有自己的一片天,那就得拿出点自己的绝活:
无阻塞高并发,是nodeJS的招牌,要达到无阻塞高并发异步是其基本保障
举例: 查询数据从数据库,PHP第一个任务查询数据,后面有了新任务,那么后面任务会被挂起排队;
而nodeJS是第一个任务挂起交给数据库去跑,然后去接待第二个任务交给对应的系统组件去处理挂起,接着去接待第三个任务…那这样子的处理必然要依赖于异步操作。
promise 是一个对象promise 是一个对象,对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外)
并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据
代码风格,容易理解,便于维护
多个异步等待合并便于解决
promise详解new Promise(
function (resolve, reject) {
// 一段耗时的异步操作
resolve('成功') // 数据处理完成
// reject('失败') // 数据处理出错
}
).then(
(res) => {console.log(res)}, // 成功
(err) => {console.log(err)} // 失败
)
resolve 作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
promise有三个状态:1、pending [待定] 初始状态
2、fulfilled [实现] 操作成功
3、rejected [被否决] 操作失败
当promise状态发生改变,就会触发 then()
里的响应函数处理后续步骤;
promise状态一经改变,不会再变。
Promise对象的状态改变,只有两种可能:
从 pending
变为 fulfilled
从 pending
变为 rejected
。
这两种情况只要发生,状态就凝固了,不会再变了。
Promise 解决回调地狱Promise 是异步编程的一种解决方案,从语法上讲,Promise 是一个对象,从它可以获取异步操作的消息。
ES6 Promise
ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被列为正式规范。作为ES6中最重要的特性之一,我们有必要掌握并理解透彻。本文将由浅到深,讲解Promise的基本概念与使用方法。
console.dir(Promise)
使用 Promise 主要有以下好处:
可以避免多层异步调用嵌套问题(回调地狱)
Promise 对象提供了简洁API,使得控制异步操作更加容易
Promise 基本用法实例化 Promise 对象,构造函数中传递函数,该函数中用于处理异步任务
resolve
和 reject
两个参数用于处理成功和失败两种情况,并通过 p.then
获取处理结果
var p = new Promise(function(resolve,reject){
// 成功时调用 resolve()
// 失败时调用 reject()
});
p.then(function(ret){
// 从 resolve 得到正常结果
},function(ret){
// 从 reject 得到错误信息
});
示例
var p=new Promise(function(resolve,reject){
//这里用户实现异步任务
setTimeout(function(){
var flag=false;
if(flag){
//正常情况
resolve('hello');
}else{
//异常情况
reject('出错了');
}
},1000);
});
//hello传递给了data
p.then(function(data){
//打印正常信息
console.log(data);
},function(info){
//打印异常信息
console.log(info);
});
一秒后打印:
//Promise基于原生ajax发送请求
function queryData(url){
var p=new Promise(function(resolve,reject){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=function(){
if(xhr.readyState!=4) return;
if(xhr.readyState==4 && xhr.status==200){
//处理正常的情况
resolve(xhr.responseText);
}else{
//处理异常的情况
reject('服务器错误');
}
};
xhr.open('get',url);
xhr.send(null);
});
return p;
}
queryData("http://dcatadmin.cc/user").then(function(data){
var obj = JSON.parse(data); //SON字符串转换成对象
console.log(obj);
alert(obj.name);
},function(info){
console.log(info);
});
php
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?