当前位置:网站首页>Promise 1: Basic Questions
Promise 1: Basic Questions
2022-08-03 09:36:00 【Do you want to buy groceries?】
目录
1. Promise 是什么
理解
1. 抽象表达:
2. promise 的状态改变
3.promise 的基本流程

4. promise 的基本使用


使用 2: 使用 promise 封装基于定时器的异步




2. 为什么要用 Promise?
2.1. 指定回调函数的方式更加灵活
PromiseThe previous old solutions used callback functions to complete asynchronous programming operations
1、fs 文件操作 如 NodeJS
require('fs').requireFile('./index.html',(error,data)=>{})
2、数据库操作 如 MongoDB MySQL
3、 AJAX 网络请求
$.get('/server',(data)=>{})
4、定时器 setTimeout(()=>{},2000)2. promise: 启动异步任务 => 返回promie对象 => 给promise对象绑定回调函
2.2. 支持链式调用, 可以解决回调地狱问题
setTimeout(function () { //第一层
console.log('武林要以和为贵');
setTimeout(function () { //第二程
console.log('要讲武德');
setTimeout(function () { //第三层
console.log('不要搞窝里斗');
}, 1000)
}, 2000)
}, 3000)
使用promise就可以解决这个问题
function fn(str){
var p=new Promise(function(resolve,reject){
//处理异步任务
var flag=true;
setTimeout(function(){
if(flag){
resolve(str)
}
else{
reject('操作失败')
}
})
})
return p;
}
fn('武林要以和为贵')
.then((data)=>{
console.log(data);
return fn('要讲武德');
})
.then((data)=>{
console.log(data);
return fn('不要搞窝里斗')
})
.then((data)=>{
console.log(data);
})
.catch((data)=>{
console.log(data);
})
2. 回调地狱的缺点?
3. 如何使用 Promise?
3.1. API
// 1.创建一个新的promise对象
const p = new Promise((resolve, reject) => {
// 执行器函数 同步回调
// 2.执行异步操作任务
setTimeout(() => {
const time = Date.now();
// 如果当前时间是偶数代表成功,否则代表失败
// 3.1 如果成功了,调用resolve(value)
if (time % 2 == 0) {
resolve("成功的数据, time=" + time);
} else {
// 3.2 如果失败了,调用reject(reason)
reject("失败的数据, time=" + time);
}
});
}, 1000);
//如果传入的参数为 非Promise类型的对象, 则返回的结果为成功promise对象
//如果传入的参数为 Promise 对象, 则参数的结果决定了 resolve 的结果
p.then(
(value) => {
// 接收得到成功的value数据
console.log("onResolved", value);
},
(reason) => {
// 接收得到失败的reason数据
console.log("onRejected", reason);
}
);
let p1 = new Promise((resolve, reject) => {
resolve('OK');
})
// let p2 = Promise.resolve('Success');
let p2 = Promise.reject('Error');
let p3 = Promise.resolve('Oh Yeah');
//
const result = Promise.all([p1, p2, p3]);
console.log(result); // Uncaught (in promise) Error
Promise.race 方法: (promises) => {}
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
},1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('failed')
}, 500)
})
Promise.race([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error) // 打开的是 'failed'
})
边栏推荐
- ORA-06512 数字或值错误字符串缓冲区太小
- 命令行加载特效 【cli-spinner.js】 实用教程
- MySQL-TCL语言-transaction control language事务控制语言
- pytorch安装错误
- oracle ASM磁盘空间的查看
- Rabbit and Falcon are all covered, Go lang1.18 introductory and refined tutorial, from Bai Ding to Hongru, the whole platform (Sublime 4) Go lang development environment to build EP00
- What exactly does a firmware engineer do?
- 二叉查找树的插入
- bihashSummary
- MySQL的分页你还在使劲的limit?
猜你喜欢
随机推荐
Does setting the following sysctl settings require a system reboot?
SQL教程之递归 CTE Common Table Expression
015-平衡二叉树(一)
【LeetCode】226. Flip the binary tree
多媒体数据处理实验3:图像特征提取与检索
ClickHouse查询语句详解
MySQL的主从复制
LINGO 18.0 software installation package download and installation tutorial
gpnmb+ gpnmb-AT2 cell idling mapping Epithelial cell idling mapping
MySQL的存储过程
go版本升级
【LeetCode】622.设计循环队列
mysql的union和union all
GO开发环境配置
R语言ggplot2可视化数据点重合的散点图、数据点有重合、使用geom_smooth函数基于lm方法拟合数据点之间的趋势关系曲线、自定义数据点的大小、色彩、添加主标题、副标题、题注信息
MySQL_关于JSON数据的查询
固件工程师到底是干什么?
Rabbit and Falcon are all covered, Go lang1.18 introductory and refined tutorial, from Bai Ding to Hongru, the whole platform (Sublime 4) Go lang development environment to build EP00
Flink Yarn Per Job - 提交应用
Flink Yarn Per Job - 启动AM









