需求:我去逛一个商场,要做两件事,一个是吃饭,一个是喝水,我要求先吃饭再喝水
// 定义两个方法,eat,drink
function eat (){
setTimeout(()=>{
console.log("吃饭");
},1000)
}
function drink (){
setTimeout(()=>{
console.log("喝水");
},500)
}
eat();
drink();
// 执行后发现是先喝水再吃饭的
解决办法:可以嵌套写,但这就成回调地狱
function eat (){
setTimeout(()=>{
console.log("吃饭");
function drink (){
setTimeout(()=>{
console.log("喝水");
},500)
}
return drink()
},1000)
}
eat ()
所以可以用Promise,里面的resolve可以将异步操作的结果,作为参数传递出去
function eat (){
return new Promise(function(resolve){
setTimeout(()=>{
resolve("吃饭");
},1000)
})
}
function drink (){
return new Promise(function(resolve){
setTimeout(()=>{
resolve("喝水");
},500)
})
}
eat().then((data)=>{
console.log(data);
// 再调用drink
return drink()
下面拿到的data就是drink里面resolve传出来的
}).then((data)=>{
console.log(data);
})
但是这样也不太方便,所以有了async语法
function eat (){
return new Promise(function(resolve){
setTimeout(()=>{
resolve("吃饭");
},1000)
})
}
function drink (){
return new Promise(function(resolve){
setTimeout(()=>{
resolve("喝水");
},500)
})
}
async function getDate(){
// 直接把resolve传出来的值给eat
let res = await eat();
console.log(res);
let result = await drink()
console.log(result);
}
getDate()
ok,这样是不是既美观有方便阅读呢