需求:我去逛一个商场,要做两件事,一个是吃饭,一个是喝水,我要求先吃饭再喝水
// 定义两个方法,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,这样是不是既美观有方便阅读呢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。