小编Vik*_*vin的帖子

如何使箭头函数异步?

我有以下代码检查文件是否存在,如果存在,则从中解析 JSON 数据:

fs.access(dbPath, (err) => {
        if (err) throw err
        else{
            console.log('Database found. Processing data.');
            dbObj = processDatabaseFile(dbPath);
            console.log('checkonstartup: '+dbObj);
            return;
        }
    });
Run Code Online (Sandbox Code Playgroud)

这是 processDatabaseFile:

function processDatabaseFile(path){
    fs.readFile(path, (err, data) =>{
        if (err) throw err;
        let jsonData = JSON.parse(data);
        return jsonData;
    })
}
Run Code Online (Sandbox Code Playgroud)

我的问题是当 fs.access 函数被调用时,它比返回更快processDatabaseFile(dbPath)返回。例如。我想让它使用异步等待,但我不知道该怎么做。

尝试放置async (err) => { ...声明然后使用, dbObj = await processDatabaseFile(dbPath)但它会在 if-else 和分号以及缺少括号周围给出错误。

反馈表示赞赏。

编辑:关于添加 async-await 的错误。我正在使用 VSCode,结果发现 ESLint 和 JSHint 相互冲突。

javascript node.js async-await

7
推荐指数
1
解决办法
6231
查看次数

函数参数报告"错误预期模式,找到关键字`mod`"

我在类中有一个准系统功能,这是唯一的功能.

pub fn getfreq(note: char, mod: char, oct: i8) {}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

error: expected pattern, found keyword `mod`
 --> src/main.rs:1:28
  |
1 | pub fn getfreq(note: char, mod: char, oct: i8) {}
  |                            ^^^
Run Code Online (Sandbox Code Playgroud)

mod什么锈有关系吗?我只是想用它来缩写'修饰符'.

function rust

1
推荐指数
1
解决办法
699
查看次数

在 Go 服务器的接收端到达不一致的 TCP Protobuf 消息

我有一个“代理”,它将二进制文件解析到一个缓冲区中,每当该缓冲区被填满时,就通过 protobuf 消息将其发送到服务器,然后继续进行下一个二进制解析块,然后再次发送,等等。

在服务器上,我使用一个简单的net/conn包来侦听代理连接并在 while-for 循环中从它读取到缓冲区。当解析完成代理端,它terminate在 protobuf 消息中发送一个布尔值,表明这是最后一条消息,服务器可以继续处理收到的完整数据。

但是,如果我将调试打印留在我的发送方,这会很好地工作,使终端打印显着减慢通过connection.Write().

如果我取消注释这个记录器,那么它发送消息的速度太快,服务器处理的第一个传入消息是一个包含terminate标志的数据包,例如,它没有收到实际的有效负载,而是立即收到最后一条消息。

我知道 TCP 并没有真正区分不同的 []byte 数据包,这很可能是导致这种行为的原因。有没有更好的方法来做到这一点,任何替代方案?

伪代码代理端:

    buffer := make([]byte, 1024)
    for {
        n, ioErr := reader.Read(buffer)
        if ioErr == io.EOF {
            isPayloadFinal = true

            // Create protobuf message
            terminalMessage, err := CreateMessage_FilePackage(
                2234,
                protobuf.MessageType_PACKAGE,
                make([]byte, 1),
                isPayloadFinal,
            )
            // Send terminate message
            sendProtoBufMessage(connection, terminalMessage)
            break
        }
        // Create regular protobuf message
        message, err := CreateMessage_FilePackage(
            2234,
            protobuf.MessageType_PACKAGE,
            (buffer)[:n],
            isPayloadFinal)
        sendProtoBufMessage(connection, message)
   } …
Run Code Online (Sandbox Code Playgroud)

buffer tcp go protocol-buffers

0
推荐指数
1
解决办法
99
查看次数

标签 统计

async-await ×1

buffer ×1

function ×1

go ×1

javascript ×1

node.js ×1

protocol-buffers ×1

rust ×1

tcp ×1