0

我有一个测试需要通过我的 make 系统在本地加载一个 API。为此,我使用child_process.exec. 不幸的是,这个回调只有在进程终止后才会执行,我需要 API 直到测试完成。我想不出办法让它发挥作用。

request = require "request"
child_process = require "child_process"
tsc = require "training_service_connector"

campaign = "happy"
strategy = campaign
port_number = 54340
service_conf_filename = tsc.writeServiceConfig(strategy, port_number)
exec_callback = (error, stdout, stderr) -> console.log ('stdout:\n' + stdout + '\nstderr:\n' + stderr + "\nerror:\n" + error)
child_process.exec("CONFIG=#{service_conf_filename} make run_bidder_service_runner", exec_callback)
secret = {}
setToken = (error, response, body) -> secret.token = body.token
details = {"email" : "email@email.com", "password" : "password", "sendImmediately" : false}
request.post {uri: "http://127.0.0.1:#{port_number}/authenticate", json: details}, setToken

在 REPL 中逐行运行它可以正常工作,但是一次运行它会产生错误。

opts = {uri: "http://127.0.0.1:#{port_number}/authenticate", json: details}
realtries = 0
val = 0
postAndCount = () -> console.log "#{realtries++}: {#{secret}}"; request.post(opts, setToken); clearInterval(val) if "token" of secret
val = setInterval(postAndCount, 2000)
console.log secret

这行得通(尽管这是一种非常迂回的做事方式)并且还有一个问题是,此代码所针对的函数最终会在 API 实际准备好之前返回。有什么方法可以强制 JS 等待某种触发器?是否有任何库具有 sleep() 或 wait() 或任何其他使函数在返回之前等待的方式?

重新设计此函数用于的整个测试系统,并通过回调触发每个测试是不可行的。

4

0 回答 0