仅当其他异步方法在Swift中完成工作时,如何才能异步调用某个方法?
我正在为swift
实施socket.io
库。仅当其他异步方法在Swift中完成工作时,如何才能异步调用某个方法?
有相关连接(如下所示)的服务器的方法:
func connectToServerWithNickname(nickname: String) {
socket.emit("connectUser", nickname)
}
的socket.emit
电话:
private func _emit(data: [AnyObject], ack: Int? = nil) {
dispatch_async(emitQueue) {
guard self.status == .Connected else {
self.handleEvent("error", data: ["Tried emitting when not connected"], isInternalMessage: true)
return
}
let packet = SocketPacket.packetFromEmit(data, id: ack ?? -1, nsp: self.nsp, ack: false)
let str = packet.packetString
DefaultSocketLogger.Logger.log("Emitting: %@", type: self.logType, args: str)
self.engine?.send(str, withData: packet.binary)
}
}
,你可以看到这一切都装在dispatch_async
。我想尽快张贴NSNotification
因为这种方法做,我的应用程序连接到服务器,某事像:
NSNotificationCenter.defaultCenter().postNotificationName(setConnectionStatus, object: self)
所以我的问题是 - 我应该如何修改我的connectToServerWithNickname
方法,使其调用我的nsnotificationcenter
什么时候一切正常?
后,你说你正在使用socket.IO
当您在连接之前,你将有
var socket: SocketIOClient = SocketIOClient(socketURL: NSURL(string: "http://192.168.1.XXX:3000")!)
那么在此之后把
socket.on("connect") { (data, ack) -> Void in
// This will be fired once your socket connects.
}
EDIT使您的插座实例:
对于个人排放,你会保持一个指向你的并使用
let json = ["things_i_need_to_send" : stuff]
socket.emitWithAck(Place_i_need_to_send_to, json)(timeoutAfter: 3) { data in
//This is called on completion
}
所以使用你的上面的例子。
socket.emitWithAck(connectUser, nickname)(timeoutAfter: 3) { data in
//This is called on completion
}
有没有办法在这里检查完成处理程序? – user3766930
谢谢!最后一个问题 - 这里的timeoutAfter是什么? – user3766930
呼叫超时前的时间(以秒为单位)并被视为失败。 – SeanLintern88
'只要这个方法完成,我的应用程序连接到服务器'这是否意味着它可以在'self.engine?.send(str,withData:packet.binary)'行之后完成,或者在发送通知之前,您是否必须等待服务器响应以确保您已连接? – Moritz
我知道有确认连接成功的'ack'数据,所以对我来说,获得这些信息然后调用'NSNotificationCenter'是完美的。否则 - 如果这是不可能的 - 我可以留在第一个选项,虽然 – user3766930
你没有套接字监听器,就像onEvents,当你收到连接的消息时会触发? – SeanLintern88