2017-10-17 4 views
0

私はそうのように見えるFlow書き込みしようとしている。このようなモジュールの外観にエリクサーの流れ:配管の複数の引数

def perform(id) do 
    id 
    |> Flow.from_stage(max_demand: 10) 
    |> Flow.map(&download(&1)) 
    |> Flow.map(&process(&1)) 
    |> Flow.each(&cleanup(&1, &2)) 
    |> Flow.each(&respond(&1, &2)) 
    |> Flow.run 
end 

その他の機能:

def download(id) do 
    Service.get_images(id) 
    id 
end 

def process(id) do 
    %Result{out: sys_out, status: _} = Porcelain.exec("osascript", 
    ["#{File.cwd!}/lib/script/test", "#{id}", "#{Application.get_env(:app, :server_env)}"] 
) 
    {id, sys_out} 
end 

def cleanup(id, files) do 
    for file <- String.split(files, " ") do 
    System.cmd("exiftool", ["#{File.cwd!}/#{file}"]) 
    end 
    {id, files} 
end 

def respond(id, files) do 
    files = String.split(files, " ") 
    System.cmd("curl", [" -d 'dowhatever=#{files[0]}&else=#{files[1]}' -k #{Application.get_env(:app, :api)}what/#{id}/notify"]) 
    :ok 
end 

をしかし、私は入れませんこのエラー:

** (FunctionClauseError) no function clause matching in Flow.each/2 
... 
(app) lib/app/processor.ex:18: App.Processor.perform/1 

18行目は&cleanup/2行です。私はここで間違って何をしていますか? cleanup/2がアリティを持つと宣言されている間、私は何とか正しい値を返さないてるように感じる...

答えて

2

process/1は、タプル{id, sys_out}を返します。

反復処理は、タプルのリストは、イテレータがあなたがcleanup/1の内側にあなたのタプルを分解する必要がありますアリティ1でなければなりません意味:

- def cleanup(id, files) do 
+ def cleanup({id, files}) do 

など、それを呼び出す:

Flow.each(&cleanup/1) 

同じことが当てはまります次のrespondに移動します。

+0

ああ、ありがとうございました! –

関連する問題