js异步中的async和await问题,undefined???

今天学习异步中的async和await,但是写了个测试还是没搞明白,有哪位告知下这是为什么吗?
async function a() {setTimeout(function () {return "a"},3000)}async function b() {setTimeout(function () {return "b"},2000)}async function c() {setTimeout(function () {return "c"},1000)}async function d() {let a1 = await a()let b1 = await b()let c1 = await c()console.log(a1,b1,c1)}d()

//为什么打印结果不是a,b,c而是undefined???

这是因为你这a、b、c函数并没有返回值(setTimeout的返回值不等于是函数的返回值),所以当然是undefined。而且按照ES7的语法规定,a、b、c函数的返回值必须是promise对象。下面是正确的代码:
async function a() {
return new Promise(res=>{
setTimeout(()=>res("a"),3000)
})
}
async function b() {
return new Promise(res=>{
setTimeout(()=>res("b"),2000)
})
}
async function c() {
return new Promise(res=>{
setTimeout(()=>res("c"),1000)
})
}
async function d() {
let a1 = await a()
let b1 = await b()
let c1 = await c()
console.log(a1,b1,c1)
}
d()
温馨提示:答案为网友推荐,仅供参考