比较Promise, Generator, Async写法:
function takeLongTime(n) {
return new Promise(resolve => {
setTimeout(() => resolve(n + 200), n);
});
}
function step1(n) {
console.log(`step1 with ${n}`);
return takeLongTime(n);
}
function step2(n) {
console.log(`step2 with ${n}`);
return takeLongTime(n);
}
function step3(n) {
console.log(`step3 with ${n}`);
return takeLongTime(n);
}
Promise
function doIt() {
console.time("doIt");
const time1 = 300;
step1(time1)
.then(time2 => step2(time2))
.then(time3 => step3(time3))
.then(result => {
console.log(`result is ${result}`);
});
console.timeEnd("doIt");
}
doIt();
// step1 with 300
// doIt: 13202.5498046875ms
// step2 with 500
// step3 with 700
// result is 900
Generator
function* doii() {
console.time("do");
const time1 = 300;
const time2 = yield step1(time1);
const time3 = yield step2(time2);
const result = yield step3(time3);
console.log(`result is ${result}`);
console.timeEnd("do");
}
doii();
let res = doii();
res.next().value
.then( a => res.next(a).value )
.then( b => res.next(b).value )
.then( c => res.next(c).value )
// step1 with 300
// step2 with 500
// step3 with 700
// result is 900
// do: 1506.312744140625ms
Async
async function doIt() {
console.time("doIt");
const time1 = 300;
const time2 = await step1(time1);
const time3 = await step2(time2);
const result = await step3(time3);
console.log(`result is ${result}`);
console.timeEnd("doIt");
}
doIt();
// step1 with 300
// step2 with 500
// step3 with 700
// result is 900
// doIt: 1507.68505859375ms
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。