// 如果它等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。
// 如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。
/
// 异步调用
function a(n) {
return new Promise(resolve => {
setTimeout(() => resolve(n + 1000), n);
});
}
function s1(n) {
cc.log("s1");
return 20;
}
function s2(n) {
cc.log("s2");
return a(n);
}
function s3(n) {
cc.log("s3");
return a(n);
}
async function doIt() {
let n = 2000;
let s1str = await s1(n);
cc.log("doIt end " + s1str);
let s2str = await s2(n);
cc.log("doIt end " + s2str);
let s3str = await s3(n);
cc.log("doIt end " + s3str);
cc.log("doIt end");
}
// doIt();
//
// 并发同步
function s4() {
return new Promise(resolve => {
setTimeout(() => {
cc.log("s4 end");
resolve(100);
}, 2000);
});
}
function s5() {
return new Promise(resolve => {
setTimeout(() => {
cc.log("s5 end");
resolve(100);
}, 2000);
});
}
async function doIt2() {
// s4 执行完后才执行 s5 浪费时间
// let s4P = await s4();
// let s5P = await s5();
// s4 和 s5 同时进行,最后再输出
// 方法1
let s4P = s4();
let s5P = s5();
let s4Str = await s4P;
let s5Str = await s5P;
cc.log("doIt2 end");
// 方法2
// let [s4Result, s5Result] = await Promise.all([s4(), s5()]);
}
doIt2();
//
// 多并发同时进行
function s6(n) {
let time = n * 1000;
return new Promise(resolve => {
setTimeout(() => {
cc.log(time);
resolve(time);
}, time);
});
}
async function doIt3() {
// 方法1
// let gghs = [];
// for (let i = 0; i < 30; i++) {
// gghs.push(i);
// }
// gghs.map(async n=>{
// let ss = await s6(n);
// return ss;
// });
// 方法2
let gghs = [];
for (let i = 0; i < 30; i++) {
let p = s6(i);
gghs.push(p);
}
await Promise.all(gghs);
cc.log("eeeeeeeeeeeeeeeeeeeee");
}
// doIt3();