结合产生的过程输出

时间:2017-03-21 12:05:06

标签: coffeescript hubot

虽然以下代码可以很好地调用python脚本并获得输出:

s = spawn 'python', ['-u', 'foo.py']
s.stdout.on 'data', (data) -> msg.send data.toString()
s.stderr.on 'data', (data) -> msg.send data.toString()

foo.py返回许多不同的响应(它在运行时返回更新)。

例如:

def function1():
  print "Function 1 complete"

def function2():
  print "Function 2 complete"

function1()
function2()

Hubot不会以一致的顺序显示这些结果。我知道如果多次调用msg.send会发生这种情况。

虽然我知道我可以重写foo.py以表现不同,但其他进程依赖于foo.py并且我无法改变其行为。

我想知道在过程中收集响应的过程可能是什么,并发送单个msg.send,希望单次调用msg.send将保留过程输出的顺序。

1 个答案:

答案 0 :(得分:1)

Imho,最好是通过添加qbluebird

来使用承诺

例如,它会导致:

Promise.all([function1(), function2()]).then (res) ->
  msg.send res.join(", ")