专业提示:使用 Promise.then 进行函数组合
最近我开始喜欢上了函数式编程(尽管我对它了解不多)。随着时间的推移,我在使用 JavaScript 中的 Promise 时养成了一个习惯。我会尽量让我的代码看起来像这样:
let tweetsToAttendTo = fetchTweets()
.then(removeDuplicates)
.then(removeTweetsIveRepliedTo)
.then(fetchRelevantTweets);
这意味着我then不仅用它来控制流程,还用它来将一个函数的输出传递给另一个函数的输入(从而创建一个管道)。我发现这种模式使代码更易于阅读和理解,并消除了不必要的填充内容,例如以下代码中的箭头函数和额外的变量:
fetchTweets()
.then(tweets => removeDuplicates(tweets));
不过要小心!使用这种模式时,您必须了解以下几点:
- 应用此方法取决于将前一个函数的结果作为下一个函数的输入。
- 使用对象方法时要小心。例如,以下两段代码片段的意思并不相同:
getModels().then(r => manager.applyFilters(r))
// any calls to `this` in `manager.applyFilters` will return undefined
getModels().then(manager.applyFilters)
最终,不要强求。我经常这样做,但如果它真的不起作用(F1 的输出不是 F2 的输入,F2 的行为不同,或者我需要进行特殊的错误处理),我就会放弃。记住,没有万全之策!
文章来源:https://dev.to/shalvah/pro-tip-using-promisethen-for-function-composition-324i