通过网络在javascript中顺序执行

时间:2015-02-16 09:07:37

标签: javascript node.js

在我的应用程序中,递归函数调用远程对等体获取某些数据,然后再次调用自身。有没有办法等待服务器的响应,然后继续执行流程?

我正在使用Simple-Peer进行远程调用。

function foo() {
    data = getFromPeer();
    if(condition)
        foo();
    else return bar;
}

getFromPeer是一个用户定义的函数,它使用SimplePeer连接将数据发送到远程对等方。远程对等体在收到请求时作出响应。目前没有定义任何承诺或回调。

1 个答案:

答案 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',..)