在我的应用程序中,递归函数调用远程对等体获取某些数据,然后再次调用自身。有没有办法等待服务器的响应,然后继续执行流程?
我正在使用Simple-Peer
进行远程调用。
function foo() {
data = getFromPeer();
if(condition)
foo();
else return bar;
}
getFromPeer
是一个用户定义的函数,它使用SimplePeer
连接将数据发送到远程对等方。远程对等体在收到请求时作出响应。目前没有定义任何承诺或回调。
答案 0 :(得分:0)
查看https://github.com/feross/simple-peer的文档,似乎没有一种标准方法可以执行“远程过程调用”或接收对以前发送的某些数据实际已收到的事实的确认。
因此,为了通过simple-peer实现您想要实现的目标,您需要在简单对等通道上添加自定义“协议”。由于您无法保证远程对等方将收到您的消息的顺序,您需要为每条消息提供一个ID。
伪代码中的类似内容(并且考虑到peer
是一个连接的简单对等方)
pendingJobs = {}
function addJob(data, callback) {
var id = uuid() // imagine a function giving a uuid
pendingJobs[id] = callback
peer.send({ id: uuid, payload: data })
}
peer.on('data', function(info) {
var id = info.id
var cb;
if (pendingJobs[id] && info.payload) {
cb = pendingJobs[id]
cb(info.payload)
}
})
当然这个伪代码解决方案非常粗糙,您可能需要添加一些pendingJobs的垃圾回收,如果远程对等方从不发送ACK消息,则会有错误回调。
你可以为每条消息添加一个类型('rpc','ack',..)