这里就不讲解Promise和Async和Await什么东西了,直接上代码,和对应的结果。希望你能自己跑一边就知道他们之间的区别和什么时候用了。
标准代码和结果:
interface IBase{
do(i:number):Promise<any>;
}
class BaseClass implements IBase{
async do(i:number):Promise<any>{
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve();
},i);
});
}
}
class Aclass extends BaseClass{
async run(i:number,s:string):Promise<void>{
let j = 0;
while(j<10){
console.log(s);
await this.do(i);
j++;
}
}
}
async function main(){
let a = new Aclass();
let b = new Aclass();
a.run(2000,'aaaaa');
b.run(3500,'bbbbb');
}
main();
对应的输出(a每两秒输出一次,b每3.5秒输出一次,他们之间相互不影响各自的时间间隔,犹豫多线程一样。):
aaaaa
bbbbb
aaaaa
bbbbb
aaaaa
aaaaa
bbbbb
aaaaa
aaaaa
bbbbb
bbbbb
bbbbb
如果把BaseClass中的return删除,则输入出入(并且输出是瞬间完成,没有等待时间)
aaaaa
bbbbb
aaaaa
bbbbb
aaaaa
bbbbb
aaaaa
bbbbb
aaaaa
bbbbb
aaaaa
bbbbb
恢复到最开始的代码,如果在main方法内 在a.run(xxxx)和b.run(xxxx)前面都加一个await,则返回结果如下(a每次2秒,a6次循环完毕后,b才开始出现,并且3.5秒一次)
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
aaaaa
bbbbb
bbbbb
bbbbb
bbbbb
bbbbb
bbbbb
好啦,具体为什么是酱紫就有待各位自己去使用了。
跟着代码敲一遍,可能就会有更深入的理解了。