async 与 await 与 promise的使用
- async 关键字声明的函数自动变为 promise对象。 return的结果就是promise.resolve()的结果!
- await 关键字必须在async中使用!阻塞目前代码(因阻塞代码务必在async中使用!) 寓意为等待此函数结果 取得结果方得顺畅
- promise 常规then关键字链接,传递参数时一般只传递一个res 对象。传递多个参数时较为麻烦~
- 定时器模仿异步: 输出第一步 第二步 第三步 分别用了多少秒
function createTime(t) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(t + 1000);
}, t);
});
}
function a(t) {
return createTime(t);
}
function b(t) {
console.log(`第一步用时${t}秒 `);
return createTime(t);
}
function c(t, m) {
console.log(`第一步用时${t}秒,第二步用时${m}秒 `);
return createTime(m);
}
- promise传参输出 (return 很重要 必须return才能取得精确值)
const time = 1000;
a(time)
.then((res) => {
return b(res).then((temp) => {
return [res, temp];
});
})
.then((res) => {
return c(...res).then((result) => {
return [...res, result];
});
})
.then((res) =>
console.log(
`第一步用时${res[0]}秒,第二步用时${res[1]}秒,第三步用时${res[2]}秒 `
)
);
- async await 传参输出
/* async await解决Promise传递参数复杂问题 */
async function test() {
const time1 = await a(time);
const time2 = await b(time1);
const time3 = await c(time1, time2);
const times = [time1, time2, time3];
return times;
}
test().then((res) =>
console.log(
`第二步用时${res[0]}秒,第二步用时${res[1]}秒,第三步用时${res[2]}秒 `
)
);