引言
众所周知setTimeout是一个异步函数,试想以下场景、在setTimeout中定义一个变量并赋值,如何获取该变量的值。代码如下
function test(){
setTimeout(()=>{
let name = "张三";
})
}
console.log(test())
如何获取name的值呢
假如在setTimeout函数内return name 输出结果为undefined
假如在setTimeout外test()函数内return name 执行报错
解决办法有以下三种方式
方式一:使用回调函数
代码如下
function test(callBack) {
setTimeout(() => {
var name = "张三";
callBack(name);
}, 1000);
}
const callBack = aaa => {
console.log(aaa);
return aaa;
};
test(callBack);
解释一下。其实很简单,就是在setTimeout回调函数里面再写一个回调函数,利用回调函数获取name。
方式二:使用Promise
const test = new Promise((reslove, reject) => {
setTimeout(() => {
let name = "张三";
reslove(name);
}, 1000);
});
test.then(res => {
console.log(res);
});
方式三:async await
async function test() {
return new Promise((reslove, reject) => {
setTimeout(() => {
var name = "张三";
reslove(name);
}, 1000);
});
}
async function getdata() {
var data = await test();
console.log(data);
}
getdata();