Usando conccurrent-ruby , ¿cómo puedo ejecutar un conjunto de promesas y luego obtener los resultados?
Aquí hay un ejemplo de lo que me gustaría poder hacer (La prueba pasa porque nunca llega al bloque 'entonces'.
it "can aggregate the results" do Concurrent::Promise::all?( Concurrent::Promise.execute { 42 }, Concurrent::Promise.execute { 43 }, ).then do |result| binding.pry expect(result).to eq([42, 43]) end endPara ejecutar el .all? promete que necesita llamar a .execute y .wait , eso significa que se ejecutará y luego esperará hasta que el resultado esté listo, tenga en cuenta que la wait está bloqueando, lo que significa que bloqueará su código`. ex:
Concurrent::Promise.all?( Concurrent::Promise.new { 42 }, Concurrent::Promise.new { 43 } ).then do |result| puts 'finished promises' end.execute.wait Sin embargo, si desea obtener los resultados una vez finalizadas las promesas, puede utilizar el método .zip , por ejemplo:
Concurrent::Promise.zip( Concurrent::Promise.execute { 42 }, Concurrent::Promise.execute { 43 } ).then do |result| expect(result).to eq([42, 43]) end.wait Nota: ¿Hay algunas diferencias entre .zip y .all? consulte los documentos: https://www.rubydoc.info/gems/concurrent-ruby/Concurrent/Promise