当前位置:网站首页>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'
})
边栏推荐
猜你喜欢
随机推荐
系统io统计
机器学习(公式推导与代码实现)--sklearn机器学习库
梯度消失和梯度爆炸
Ultra-detailed Asp.net uses SSL two-way authentication, one article is enough
多媒体数据处理实验2:PCA
10 Convolutional Neural Networks for Deep Learning 2
bihashSummary
别人都不知道的“好用”网站,让你的效率飞快
Exception: Dataset not found. Solution
For heavy two-dimensional arrays in PHP
110 MySQL interview questions and answers (continuous updates)
Let‘s Encrypt 使用
【LeetCode】622. Design Circular Queue
STP生成树(端口状态+端口角色+收敛机制 )|||| STP优化技术( uplinkfast技术+Portfast技术+backbonefast技术 )详解
scala减少,reduceLeft reduceRight,折叠,foldLeft foldRight
Mysql OCP 30题
SQL exam questions
慢 SQL 分析与优化
MySQL-DDL数据定义语言-约束
多媒体数据处理实验4:LSH索引








