- 并发
- 用 Promises 替代回调
- Async/Await 是较 Promises 更好的选择
并发
用 Promises 替代回调
回调不够整洁并会造成大量的嵌套。ES6 内嵌了 Promises,使用它吧。
反例:
require('request').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin', function(err, response) {if (err) {console.error(err);}else {require('fs').writeFile('article.html', response.body, function(err) {if (err) {console.error(err);} else {console.log('File written');}})}})
正例:
require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin').then(function(response) {return require('fs-promise').writeFile('article.html', response);}).then(function() {console.log('File written');}).catch(function(err) {console.error(err);})
Async/Await 是较 Promises 更好的选择
Promises 是较回调而言更好的一种选择,但 ES7 中的 async 和 await 更胜过 Promises。
在能使用 ES7 特性的情况下可以尽量使用他们替代 Promises。
反例:
require('request-promise').get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin').then(function(response) {return require('fs-promise').writeFile('article.html', response);}).then(function() {console.log('File written');}).catch(function(err) {console.error(err);})
正例:
async function getCleanCodeArticle() {try {var request = await require('request-promise')var response = await request.get('https://en.wikipedia.org/wiki/Robert_Cecil_Martin');var fileHandle = await require('fs-promise');await fileHandle.writeFile('article.html', response);console.log('File written');} catch(err) {console.log(err);}}
