Node.js回调函数导致的多层嵌套

1,532 阅读1分钟

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();