/** * typescript 1.7 编译到ES6(Node 4+) * ES6标准 */ export class PromiseExample { constructor() { } execute() { console.log('trace 1'); this.executeDelay(); console.log('trace 2'); } async executeDelay() { let delay1 = await this.delay1(); console.log(delay1); let delay2 = await this.delay2(); console.log(delay2); let currentTime = Date.now(); // console.log('-------------------------------------', currentTime); // 使用场景,有时候可能会接收服务器提供的多种数据后才能做别的操作,而这多种结果并不知道先后顺序。这时使用Promise.all比较方便 Promise.all([this.delay1(), this.delay2()]).then((resolve) => { let _delay1 = resolve[0]; let _delay2 = resolve[1]; console.log(_delay1); console.log(_delay2); console.log(Date.now() - currentTime); }); console.log('end'); //当参数里的任意一个子promise成功或者失败后,才返回 let currentTime2 = Date.now(); // 使用场景,有时候我们需要接收服务器的多种数据都可以操作,但不确定哪个最先收到,通过Promise.race可以更快的处理结果 Promise.race([this.delay1(), this.delay2()]).then((fastReuslt) => { console.log('***:', fastReuslt); console.log(Date.now() - currentTime2); }); //1秒输出一次 let delay = async (i) => { return new Promise((c, e) => { setTimeout(() => { c(i); }, 1000); }) } let trace = async () => { for (let i = 0; i < 10; i++) { let out = await delay(i); console.log(out); } } } private delay1(): Promise { return new Promise((resolve, reject) => { setTimeout(() => { resolve("delay1Complete"); }, 2000); }); } private delay2(): Promise { return new Promise((resolve, reject) => { setTimeout(() => { resolve("delay2Complete"); }, 1000); }); } }