概念:
返回值: async返回一个promise---这个返回值是默认自发行为
async function name1(params) {
console.log(params)
}
let result = name1('lion')
console.log(result) // Promise { undefined }
result.then(res => console.log(res)) // undefined
正题
很多时候不知道该不该加async,导致async,await满天飞
demo:
function timeout(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms, 'done');
});
}
async function timeout2() {
let res = await timeout(3000)
console.log('done: 3000')
}
async function timeout3() {
let res = await timeout(2000)
console.log('done: 2000')
}
现在有个函数想要执行timeout2、timeout3,期待打印顺序肯定是: 'done: 3000' ;'done: 2000'
1、方式:timeout2、timeout3已经是async ,awiat 那么handleTimeout这么写行不行?
function handleTimeout() {
timeout2()
timeout3()
}
handleTimeout()
// done: 2000
// done: 3000
2、方式:name2 name3已经是async ,awiat 那么handleTimeout这么写行不行?
async function handleTimeout() {
timeout2()
timeout3()
}
handleTimeout()
// done: 2000
// done: 3000
3、正确的
async function handleTimeout() {
await timeout2()
await timeout3()
}
handleTimeout()
// done: 3000
// done: 2000
思想: 只看单个方法,别看那么宏观。
解析: 在async函数中,可能会有N个异步处理(promise),我们都用await进行控制时序,当前面的一系列的异步执行完毕后,最终return是一个promise(无论你是否真的在code中return一个promise)