参考视频:https://www.bilibili.com/video/BV1rK4y1J7dm
Promise解决的是将程序的异步
执行变成同步
的过程
function one(){
return "I am one"
}
function two(){
return "I am two"
}
function three(){
return "I am three"
}
function run(){
console.log(one())
console.log(two())
console.log(three())
}
run();
输出:
如果function two要对后端发一个请求,发送请求的时候服务器需要进行响应,需要一定的响应时间才能完成,我们用setTimeout模拟一下这个时间
function one() {
return "I am one"
}
function two() {
setTimeout(() => { return "I am two" }, 3000)
}
function three() {
return "I am three"
}
function run() {
console.log(one())
console.log(two())
console.log(three())
}
run();
输出:
为什么function two变成了undefined?
这是因为我们这个two()里面有一个请求,这个请求还没有完成,但是run()方法中的console.log是不会等到two()方法执行完了之后再执行的。
引出Promise,开发中很多时候都是需要等到请求完成之后
再处理(就是异步变成同步)
新建Promise对象基础格式
new Promise((resolve,reject)=>{})
resolve:成果返回…
resolve:失败返回…
修改function two()
function two() {
return new Promise((resolve, reject) => {
setTimeout(() => { resolve("I am two") }, 3000)
})
}
输出:
function two()输出的是一个Promise对象的pending状态
为什么是一个pending的状态?
虽然我们已经把这个two()的方法改成了一个Promise,但是我们在调用这个方法的时候并没有声明:需要等这个Promise完成了之后再继续往下执行。
声明等这个Promise完成了之后再继续往下执行
需要用到 Async, Await
首先需要在function run的前面加上async,表示run()方法下面有Promise的请求的调用
然后在调用Promise方法的前面加上await,表示等two()执行完了之后再继续往下执行
//Promise 异步 变成 同步
function one() {
return "I am one"
}
function two() {
return new Promise((resolve, reject) => {
setTimeout(() => { resolve("I am two") }, 3000)
})
}
function three() {
return "I am three"
}
async function run() {
console.log(one())
console.log(await two())
console.log(three())
}
run();