Javascript Node.js:在二进制文件数组上迭代哪个命令
我的一个Atom包在系统的默认文件管理器中打开一个文件。在Linux上,我有一系列广泛使用的文件管理器,我希望通过运行Javascript Node.js:在二进制文件数组上迭代哪个命令,javascript,node.js,coffeescript,atom-editor,Javascript,Node.js,Coffeescript,Atom Editor,我的一个Atom包在系统的默认文件管理器中打开一个文件。在Linux上,我有一系列广泛使用的文件管理器,我希望通过运行which命令迭代这些文件管理器并返回路径 我当前脚本的问题是,我不知道如何中断迭代。运行此代码将记录所有尝试的,并将产生所有可用选项。显然,这不是迭代的目的 咖啡脚本(JavaScript如下): JavaScript(由自动生成)-script@1.9.2): ({ 文件管理器:['xdg-open','gnome open','kde open','nautilus','d
which
命令迭代这些文件管理器并返回路径
我当前脚本的问题是,我不知道如何中断迭代。运行此代码将记录所有尝试的,并将产生所有可用选项。显然,这不是迭代的目的
咖啡脚本(JavaScript如下):
JavaScript(由自动生成)-script@1.9.2
):
({
文件管理器:['xdg-open','gnome open','kde open','nautilus','dolphin']
});
this.loopWhich(函数(结果){
返回console.log(“结果:+Result”);
});
({
loopWhich:函数(回调){
var exec、fm、i、len、ref、结果;
exec=要求(“子进程”)。exec;
ref=this.fileManagers;
结果=[];
对于(i=0,len=ref.length;i
由于异步方面的原因,这很困难,但我认为这应该可以:
{exec} = require 'child_process'
promisify = (name, fn, args...) ->
return new Promise (resolve, reject) ->
cb = (err) -> if err then reject err else resolve name
fn.apply null, args.concat(cb)
thenHandler = (name) -> console.log name
fileManagers.forEach (filem) -> promisify(filem, exec, "which #{filem}").then thenHandler
错误案例将被忽略,成功的执行应记录到控制台。如果您想要真正成功的承诺,您必须将所有承诺包装在另一个承诺中,并使用不同的。然后处理程序以正确的结果解决过度承诺:
fileManager = new Promise (resolve, reject) ->
fileManagers.forEach (filem) ->
promisify(filem, exec, "which #{filem}").then (name) -> resolve name
如果不止一次尝试成功,它将只使用第一次解决。由于异步方面的原因,这很困难,但我认为这应该是可行的:
{exec} = require 'child_process'
promisify = (name, fn, args...) ->
return new Promise (resolve, reject) ->
cb = (err) -> if err then reject err else resolve name
fn.apply null, args.concat(cb)
thenHandler = (name) -> console.log name
fileManagers.forEach (filem) -> promisify(filem, exec, "which #{filem}").then thenHandler
错误案例将被忽略,成功的执行应记录到控制台。如果您想要真正成功的承诺,您必须将所有承诺包装在另一个承诺中,并使用不同的。然后处理程序以正确的结果解决过度承诺:
fileManager = new Promise (resolve, reject) ->
fileManagers.forEach (filem) ->
promisify(filem, exec, "which #{filem}").then (name) -> resolve name
如果不止一次尝试成功,它将仅使用第一次解决