Node.js是非阻塞编程,那么在编码过程中肯定会遇到很多回调函数(callback),如果多个处理的回调函数嵌套在一起的话,就会形成多嵌套,代码非常难看。
// 回调函数导致的多层嵌套,代码难看
function dbupdate(sql, done) {
setTimeout(() => done(sql + ' update ok.'), 800);
}
dbupdate('1.sql1', param => {
console.log(param);
dbupdate('1.sql2', param => {
console.log(param);
dbupdate('1.sql3', param => {
console.log(param);
})
})
});
Promise的两种写法:
// Promise(承诺的意思),简洁
function dbupdateAsync(sql) {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(sql + ' update ok.');
resolve(sql + ' ok');
}, 800);
});
}
dbupdateAsync('2.sql1')
.then(() => dbupdateAsync('2.sql2'))
.then(() => dbupdateAsync('2.sql3'));
// async/await写法,更简洁
async function updateAll() {
const result1 = await dbupdateAsync('3.sql1');
const result2 = await dbupdateAsync('3.sql2');
const result3 = await dbupdateAsync('3.sql3');
console.log(result1, result2, result3);
}
updateAll();