如果我有一个元素数组并且我想对它们进行并行操作。
我会使用
我知道
在这里,它清楚地表明。
The Promise.all() method returns a single Promise that fulfills when all of the promises passed as an iterable have been fulfilled or when the iterable contains no promises or when the iterable contains promises that have been fulfilled and non-promises that have been returned. It rejects with the reason of the first promise that rejects, or with the error caught by the first argument if that argument has caught an error inside it using try/catch/throw blocks.
所以,是的,我们可以将简单的函数传递给
现在看看下面的代码。
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | const [leaderboard, created] = await Leaderboard.findOrCreate({...}); if (!created) { const rating = (todayAssigned.rating + leaderboard.rating * leaderboard.jobs_completed) / (leaderboard.jobs_completed + 1); const commission = todayAssigned.commission + leaderboard.commission; const jobsCompleted = leaderboard.jobs_completed + 1; await Leaderboard.update({ rating, commission, jobs_completed: jobsCompleted, updated_by: 'system', }, { where: { id: leaderboard.id, }, }); } await AssignedJob.update({ is_leaderboard_generated: true, }, { where: { id: todayAssigned.id, }, }); }); await Promise.all(promises); |
在这里,我有一个疑问。
我们正在迭代数组的每个元素并对它们进行异步操作。他们没有明确返回任何东西。
所以,我认为 map 也在这里做并行操作。
为什么要在这里使用
如果那是你想要的,并且你想收集所有返回的 Promise,以便以后可以看到它们何时都用
而且,这是一种常见的设计模式。事实上,Bluebird Promise 库有一个特殊的函数将这两者结合起来,称为
听起来您正试图弄清楚是否应该只使用
仅供参考,
如果你想在所有操作完成后做某事,你只需要
2 3 4 5 6 7 8 | // lots of async stuff }); await Promise.all(promises); // now, all Promises have resolved // alert the user that the leaderboard is completely updated |
如果您在确定所有 Promise 都已完成后不需要发生任何事情,那么
不过有一个问题 - 你没有处理错误,但应该处理错误,否则它们会给出警告或退出 Node 进程:
2 3 4 5 6 7 8 9 10 11 12 13 14 | const [leaderboard, created] = await Leaderboard.findOrCreate({...}); if (!created) { // ... // ... todayAssignedJobs.forEach(async todayAssigned => { try { await processJob(todayAssigned); } catch(e) { // handle errors } }); |
这里
如果你在
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
在Rails4.1中,ActiveRecorddestroy_all是否将整个函数包装在一个事务中?例如,如果我有一堆记录,我对其执行了destroy_all操作,它们对这些单独的对象运行了一些回调,其中一个失败了,整个操作会在那个时候回滚吗? 最佳答案 看起来不像:#Fileactiverecord/lib/active_record/relation.rb,line386defdestroy_all(conditions=nil)ifconditionswhere(conditions).destroy_allelseto_a.
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我需要从json记录中获取一些值并像下面这样提取curr_json_doc['title']['genre'].map{|s|s['name']}.join(',')但对于某些记录,curr_json_doc['title']['genre']可以为空。所以我想对map和join()使用try函数。我试过如下curr_json_doc['title']['genre'].try(:map,{|s|s['name']}).try(:join,(','))但是没用。 最佳答案 你没有正确传递block。block被传递给参数括号外的方法
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
Enumerable#each和Enumerable#map的区别在于返回的是接收者还是映射后的结果。回到接收者是微不足道的,你通常不需要在each之后继续一个方法链,比如each{...}.another_method(我可能没见过这样的案例。即使你想回到接收者那里,你也可以通过tap来实现)。所以我认为所有或者大部分使用Enumerable#each的情况都可以用Enumerable#map代替。我错了吗?如果我是对的,each的目的是什么?map是否比each慢?编辑:我知道当您对返回值不感兴趣时使用each是一种常见的做法。我对这种做法是否存在不感兴趣,但感兴趣的是,除了从
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
有什么方法可以告诉Rails3在给定的Controller中缓存所有页面,而不必在调用caches_page时列出所有页面?我尝试了caches_page:all,但它不起作用。 最佳答案 有点像实现的错误,但我刚刚尝试过它并且它适用于Rails3.0.6:caches_page:except=>[] 关于ruby-caches_page:all,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/que
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案