1、回调函数方式
doFirstThing((err, data) => {
if (err) {
console.log(err);
return;
}
doSecondThing(data, function(err, data){
if (err) {
console.log(err);
return;
}
doThirdThing(data, function(err, data){
if (err) {
console.log(err);
return;
}
})
})
})
2、Promise 方式
function takeLongTime(n) {
return new Promise(resolve => {
setTimeout(() => {
resolve(n + 200)
},)
})
}
function doThing (n) {
return takeLongTime(n);
}
const time1 = 200;
doThing(time1)
.then(time2 => doThing(time2))
.then(time3 => doThing(time3))
.catch(err => {
console.log(err)
})
复制代码
上面的代码每次异步调用递进200ms,并把下次需要延迟的时间传给下个异步函数
3、async & await
async function doThings () {
try {
const data1 = await doThing(200);
const data2 = await doThing(data1);
const data3 = await doThing(data2);
} catch (err => {
console.log(err)
})
}