初学函数式编程,有人推荐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< 中的每个项目都会启动一个保存操作
。由于 done
是 asyncSave
的回调,最终 done
将被调用,每次保存操作一次。因为 done
是用 _.after
创建的,并且传递给 _.after
的计数等于 saves.length
,传递给 _.after
的匿名函数将不会真正执行,直到 done
被调用 saves.length
次。换句话说,在示例中启动的所有保存操作完成之前,它不会被调用。
关于javascript - 我什么时候可以使用 lodash.after()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21351176/