当前位置:网站首页>ES6异步编程之Promise对象使用
ES6异步编程之Promise对象使用
2022-07-18 00:37:00 【RemoteDev】
Promise对象特点:
1. Promise对象状态不受外界影响,
一个Promise对象代表一个异步操作.
一个Promise对象有3种状态 :
Pending ---> 进行中
Fulfilled --->已成功
Rejected --->已失败
2.状态只改一次,一旦改变便不会再变,会一直保持这个结果 (Resolved)
Pending ------> Fulfilled
Pending ------> Rejected
3.缺点: 无法取消一个正在执行的Promise, 如无设置回调函数,内部错误无法抛出到外部
Promise用法:
let onePromise = new Promise((resolve,reject)=>{
//在这里执行需要异步操作的代码
});
onePromise.then(
//成功回调
(data)=>{
},
//失败回调
(err)=>{
});
// @ts-ignore
let onePromise = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('执行完成Promise');
resolve('要返回的数据可以任何数据例如接口返回数据');
}, 2000);
});
//处理Promise执行结果
onePromise.then(value => {
console.log(value);
},error=>{
});
let promise=new Promise((resolve,reject)=>{
for (let i = 0; i < 1000; i++) {
console.log(i,'异步任务执行中...');
if(i===999){
resolve({'index':i,data:'循环执行完成了'});
}
}
reject();
});
promise.then((data)=>{
console.log(data);
},(error)=>{
});//函数返回Promise对象
function runPromise(){
// @ts-ignore
return new Promise((resolve,reject)=>{
//执行异步
for (let i = 0; i < 10000; i++) {
console.log(i);
}
resolve('Loop Finish');
});
}
//Promise回调
runPromise().then((value => {
console.log('异步执行完成:',value);
}));//异步获取JSON
let getJsonAsync = (url)=>{
// @ts-ignore
let p=new Promise((resolve,reject)=>{
let c= new XMLHttpRequest();
c.open('GET',url);
c.onreadystatechange = handler;
c.responseType='json';
c.setRequestHeader('Accept','application/json');
c.send();
//处理请求状态事件
var handler = ()=>{
if(this.readyState !== 4){
return;
}
// @ts-ignore
if(this.status === 200){
resolve(this.response);
}else{
reject(new Error(this.statusText));
}
};
});
return p;
};
getJsonAsync('https://img-home.csdnimg.cn/data_json/toolbar/toolbar1105.json').then((json)=>{
console.log(json);
},(err)=>{
console.log('HTTP请求出错:',err);
});
边栏推荐
- WPF效果第一百九十二篇之TreeView支持多选
- Upload files to remote devices through pyro4 command parameters
- ADN公益加速 —— Jsdelivr npm(国内),ElmCDN的优质替代方案
- Pat grade b-b1005 continue (3n+1) guess score (25) [map solve]
- A powerful mock data generation tool
- Mysql 温故知新系列「触发器详解」
- Online dice rolling dice tool
- Is it reliable to open a new bond with one click? Is it really safe
- 进阶C语言 - 结构体实现位段
- 【golang学习笔记1.6】 golang中的堆和栈
猜你喜欢
随机推荐
Several reasons for postman calling interface to return 404
保持淡然的心情
哈希表相关知识
原力计划——怎么样才能参与原力计划
ADN公益加速 —— Jsdelivr npm(国内),ElmCDN的优质替代方案
Argument list too long causes and Solutions
Arkui route jump
【历史上的今天】7 月 17 日:软银收购 ARM;第一次电子邮件中断;维基媒体国际会议
The junior engineer in the group asked for help and said that if he wanted to collect the recruitment data, he must be arranged
我应该怎么设计我的博客?如何搭建一个体验好的博客?
【干货】MySQL底层架构设计,你了解多少?
排序子序列与倒置字符串
Mysql 温故知新系列「触发器详解」
postman调用接口返回404的几种原因
Effect of tensorflow clip on Nan and inf
重庆的哪个银行网点可以买到瑞兹基金产品?
【干货】MySQL底层架构设计,你了解多少?
OSPF comprehensive experiment
Get a list of dates in recent 30 days
Griddlyjs: Web ide based on Reinforcement Learning









