javascript - 我什么时候可以使用 lodash.after()?

标签 javascript functional-programming lodash

初学函数式编程,有人推荐lodash用于理解主要的高阶函数。

浏览 lodash API 文档,我无法掌握 sample code对于 _.after():

var saves = ['profile', 'settings'];

var done = _.after(saves.length, function() {
  console.log('Done saving!');
});

_.forEach(saves, function(type) {
  asyncSave({ 'type': type, 'complete': done });
});
// → logs 'Done saving!', after all saves have completed

上面的示例代码没有实现asyncSave(),所以我应该自己实现这个功能。但我不知道如何实现它。这是因为我不明白_.after()本身的规范。

如果有人比 API 文档所说的更容易解释函数,那就太好了。或者一个易于理解和实用的功能示例将是一个很大的帮助。谢谢!

最佳答案

_.after 将一个计数 n 和一个函数 f 作为参数,它返回一个我们可以调用的新函数 fp(表示“f 素数”)。函数 fp 会记录它被调用的次数。只要 fp 被调用的次数小于 n,调用 fp 什么都不做(除了保持它被调用的次数)称为)。一旦 fp 被调用的次数等于或大于 n,就会调用 f

所以:

var _ = require("lodash");
var fp = _.after(3, function () { console.log("OMG!"); });
fp(); // Nothing
fp(); // Nothing
fp(); // Prints "OMG!"

asyncSave 函数会为给定类型的数据(传递给它的对象中的 type 字段)异步执行保存操作,并在完成后保存操作仅调用一次回调(传递给它的对象中的 complete 字段)。

因此 _forEach 循环调用 asyncSave 一次 saves 中的每个项目,这意味着 saves< 中的每个项目都会启动一个保存操作。由于 doneasyncSave 的回调,最终 done 将被调用,每次保存操作一次。因为 done 是用 _.after 创建的,并且传递给 _.after 的计数等于 saves.length ,传递给 _.after 的匿名函数将不会真正执行,直到 done 被调用 saves.length 次。换句话说,在示例中启动的所有保存操作完成之前,它不会被调用。

关于javascript - 我什么时候可以使用 lodash.after()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351176/

相关文章:

javascript - 替换 iframe 的全部内容

python - 动态更改 urwid.MainLoop 小部件的首选方法

未找到 Angular 2/Angular 2 CLI/lodash 函数

Javascript如何将对象中的空值/未定义值设置为空字符串

javascript - lodash:根据对象的子数组创建数组

javascript - 在 rails 中使用 javascript_pack_tag 导致 EOFError

javascript - 使用 jquery 的闭包编译器应用程序

javascript - 修改数组元素访问,使其成为从 1 开始的索引

Ruby 注入(inject)奇怪的行为

concurrency - 在 Erlang 中发送/接收消息(并发)