• 并发
    • 用 Promises 替代回调
    • Async/Await 是较 Promises 更好的选择

    并发

    用 Promises 替代回调

    回调不够整洁并会造成大量的嵌套。ES6 内嵌了 Promises,使用它吧。

    反例:

    1. require('request').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin', function(err, response) {
    2. if (err) {
    3. console.error(err);
    4. }
    5. else {
    6. require('fs').writeFile('article.html', response.body, function(err) {
    7. if (err) {
    8. console.error(err);
    9. } else {
    10. console.log('File written');
    11. }
    12. })
    13. }
    14. })

    正例:

    1. require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin')
    2. .then(function(response) {
    3. return require('fs-promise').writeFile('article.html', response);
    4. })
    5. .then(function() {
    6. console.log('File written');
    7. })
    8. .catch(function(err) {
    9. console.error(err);
    10. })

    Async/Await 是较 Promises 更好的选择

    Promises 是较回调而言更好的一种选择,但 ES7 中的 async 和 await 更胜过 Promises。

    在能使用 ES7 特性的情况下可以尽量使用他们替代 Promises。

    反例:

    1. require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin')
    2. .then(function(response) {
    3. return require('fs-promise').writeFile('article.html', response);
    4. })
    5. .then(function() {
    6. console.log('File written');
    7. })
    8. .catch(function(err) {
    9. console.error(err);
    10. })

    正例:

    1. async function getCleanCodeArticle() {
    2. try {
    3. var request = await require('request-promise')
    4. var response = await request.get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin');
    5. var fileHandle = await require('fs-promise');
    6. await fileHandle.writeFile('article.html', response);
    7. console.log('File written');
    8. } catch(err) {
    9. console.log(err);
    10. }
    11. }