我有几个正在使用Sidekiq运行并使用Sidetiq安排的工作人员.我正在寻找关于在执行回调之前等待所有工人完成的最佳方法的建议,类似于Sidekiq-Pro的批处理功能.任何关于可能选项的建议都将不胜感激!
我正在努力重写许多标准Underscore.js函数的底层代码,以处理我的JavaScript技能,并且有点困在_.every/ _.all.似乎在库本身中,_.every/ _.allfunction仅使用现有_.each函数编写,但我鼓励使用我的版本_.reduce(已经包含我的版本_.each)编写版本.我已经为下面的两个函数提供了代码.
第一个测试我的_.every函数(见下面)失败的是使用_.identity函数传递所有错误的值(简单地返回作为参数输入的值)作为迭代器:
测试:
it('fails for a collection of all-falsy results', function() {
expect(_.every([null, 0, undefined], _.identity)).to.equal(false);
});
Run Code Online (Sandbox Code Playgroud)
我有几个问题,为什么我的_.every函数失败了上面显示的测试,以及多个其他测试(例如;混合的真/假值,未定义的值等):
- 调用迭代器函数时,是否需要使用iterator.call或iterator.apply?如果是这样,我使用哪个,如何指定参数?
- _.reduce这里使用的好处是什么,而不仅仅是_.each,尤其是当Underscore.js库不使用时_.reduce?
- 为什么返回需要被调用两次,一次是在调用_.reduce函数时,一次是在内部定义的匿名函数内_.reduce(我在构建使用该_.map函数的函数时也想知道这一点)?对我来说,似乎我正在返回_.reduce函数的结果,它已经返回了一些东西.
_.every:
_.every = function(collection, iterator) {
// TIP: Try re-using reduce() here.
return _.reduce(collection, function(allFound, item) {
return iterator(item) …Run Code Online (Sandbox Code Playgroud) 我希望在完全完成递归函数后执行回调,该递归函数可以持续一段不确定的时间.我正在努力解决异步问题,希望能在这里得到一些帮助.使用该request模块的代码如下:
var start = function(callback) {
request.get({
url: 'aaa.com'
}, function (error, response, body) {
var startingPlace = JSON.parse(body).id;
recurse(startingPlace, callback);
});
};
var recurse = function(startingPlace, callback) {
request.get({
url: 'bbb'
}, function(error, response, body) {
// store body somewhere outside these funtions
// make second request
request.get({
url: 'ccc'
}, function(error, response, body) {
var anArray = JSON.parse(body).stuff;
if (anArray) {
anArray.forEach(function(thing) {
request.get({
url: 'ddd'
}, function(error, response, body) {
var nextPlace = JSON.parse(body).place;
recurse(nextPlace); …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建"总计百分比"列,并且当前使用的子查询没有任何问题:
SELECT ID, COUNT(*), COUNT(*) / (SELECT COUNT(*)
FROM DATA) AS % OF TOTAL FROM DATA GROUP BY ID;
| ID | COUNT | % OF TOTAL |
| 1 | 100 | 0.10 |
| 2 | 800 | 0.80 |
| 3 | 100 | 0.10 |
Run Code Online (Sandbox Code Playgroud)
但是,出于这个问题范围之外的原因,我想看看是否有任何方法可以在不使用子查询的情况下实现此目的.本质上,应用程序使用SQL查询之外的逻辑来确定WHERE子句是什么,并将其注入查询.这个逻辑没有考虑到如上所述的子查询的存在,所以在返回并重建所有现有逻辑以解决这个问题之前,我想我会先看看是否有另一个解决方案.
我试过用窗口函数来完成这个效果,但无济于事.
javascript ×2
asynchronous ×1
node.js ×1
percentage ×1
postgresql ×1
recursion ×1
sidekiq ×1
sidetiq ×1
sql ×1