Swift 调用忽略闭包中缺少参数#4的参数
在Vapor 3中,在同步功能中:Swift 调用忽略闭包中缺少参数#4的参数,swift,vapor,Swift,Vapor,在Vapor 3中,在同步功能中: return try Process.execute( "/usr/local/bin/demo", [ "p1", "p2" ] ) 但是,如果我尝试在以下路线中使用期货和收盘: router.get("async") { request -> Future<String> in return Process.asyncExecute( "/usr/local/bin/demo", [ "p1", "p2" ], on:reque
return try Process.execute( "/usr/local/bin/demo", [ "p1", "p2" ] )
但是,如果我尝试在以下路线中使用期货和收盘:
router.get("async") { request -> Future<String> in
return Process.asyncExecute( "/usr/local/bin/demo", [ "p1", "p2" ], on:request ).flatMap(to:String) { output in
switch output {
case .stdout(let data): return(String(data: data, encoding: .utf8) ?? "")
case .stderr(let data): return(String(data: data, encoding: .utf8) ?? "")
}
}
}
router.get(“async”){request->Future in
返回进程.asyncExecute(“/usr/local/bin/demo”,[“p1”,“p2”],on:request).flatMap(to:String){output in
开关输出{
case.stdout(let数据):返回(字符串(数据:数据,编码:.utf8)??“”)
case.stderr(let数据):返回(字符串(数据:数据,编码:.utf8)??“”)
}
}
}
我得到一个编译器错误调用中的参数#4缺少参数
,显示在上述代码第2行的asyncExecute
调用的request
末尾。我已经尝试用转换
替换平面图
,但它没有改变错误
我在过去使用过类似的结构,不明白为什么这个结构不起作用。我还没有使用过vapor,但就我在查看一些文档和vapor的源代码时检查过你的代码而言,你的代码永远不会被编译
- 您需要将第四个参数传递给 它不是可选的
- 传递给第四个参数的闭包的类型必须是
闭包无法返回值(ProcessOutput)->()
的结果类型是asyncExecute(::on::)
如果要应用,传递给第二个参数的闭包必须是Future
类型(Int32)throws->Future
router.get("async") { request -> Future<String> in
var sout: String = ""
var serr: String = ""
return Process.asyncExecute( "/usr/local/bin/demo", [ "p1", "p2" ], on: request ) { output in
switch output {
case .stdout(let data):
sout = String(data: data, encoding: .utf8) ?? ""
case .stderr(let data):
serr = String(data: data, encoding: .utf8) ?? ""
}
}.map(to: String.self) {retVal in
if retVal == 0 {
return sout
} else {
return serr
}
}
}
router.get(“async”){request->Future in
var sout:String=“”
var serr:String=“”
返回Process.asyncExecute(“/usr/local/bin/demo”,[“p1”,“p2”],on:request){output in
开关输出{
case.stdout(let数据):
sout=字符串(数据:数据,编码:.utf8)?“”“
case.stderr(let数据):
serr=字符串(数据:数据,编码:.utf8)?“”
}
}.map(到:String.self){retVal in
如果retVal==0{
回流区
}否则{
返回序列
}
}
}
这段代码可能需要一些修复(正如我上面所说,我从未使用过vapor),但我希望这段代码能够帮助您解决问题。绝对完美!非常感谢你。