我正在尝试重写一个module以返回与以前不同的值,但现在它使用异步调用来获取该值。(child_process
如果重要的话)。我已经将它包装在一个 Promise 中,但这对我来说并不重要 - 它可以在原始 child_process 回调中,但问题是我无法将Promise链接到应用程序中的任何地方,因为我需要它变得同步。这是我的module:
exec = require('child_process').exec
platformHome = process.env[if process.platform is 'win32' then 'USERPROFILE' else 'HOME']
getExecPath = new Promise (resolve, reject) ->
path = process.env.GEM_HOME
if path
resolve(path)
else
exec 'gem environment', (err, stdout, stderr) ->
unless err
line = stdout.split(/\r?\n/)
.find((l) -> ~l.indexOf('EXECUTABLE DIRECTORY'))
if line
resolve line[line.indexOf(': ') + 2..]
else
reject undefined
GEM_HOME = undefined
getExecPath.then (path) ->
GEM_HOME = path
.catch ->
GEM_HOME = "#{platformHome}/.gem/ruby/2.3.0"
.then =>
module.exports = GEM_HOME // or simply return it
显然,当需要module时,这不起作用 - 如果我返回Promise本身,并then
在之后使用require
- 我的下一个module.exports
将是异步的,并且这个链将继续。我如何避免这种模式?