javascript在网络上的顺序执行

Sequential execution in javascript over network

本文关键字:顺序 执行 网络 javascript      更新时间:2023-11-30

在我的应用程序中,递归函数为一些数据调用远程对等方,然后再次调用自己。是否有任何方法可以等待服务器的响应,然后继续执行流程?

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

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

getFromPeer是用户定义的函数,它使用SimplePeer连接向远程对等端发送数据。远程对等端在收到请求时进行响应。到目前为止,还没有定义任何承诺或回调。

查看https://github.com/feross/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',..)