如何从存根函数获取返回值?

时间:2020-07-13 00:05:22

标签: javascript node.js grpc

使用grpc,我创建了一个存根“客户端”。 他有一种“验证”方法。 我这样叫

client.auth({uuid:cookies.uuid}, function(err, r){} );

参数中的函数将被异步调用,但是我需要同步获取其值。 该怎么办?

2 个答案:

答案 0 :(得分:1)

不可能将异步方法转换为同步方法。您可以使用async/await和promises“模拟”它,无需任何外部程序包。

function clientLogin() {
    return new Promise((accept, reject) => {
        client.auth({uuid:cookies.uuid}, (err, r){
            if (err) {
                reject(err);
            } else {
                accept(r);
            }
        });
    });
}

// This code needs to run inside and async function
try {
    let r = await clientLogin();
    console.log(r);
} catch (e) {
    console.error(e);
}

clientLogin()返回一个Promise,它将在以后的 (又称为异步)中得到解决。使用await关键字,您可以告诉JavaScript在继续执行之前先等待Promise解析,模拟同步代码也是如此,尽管它实际上不是同步的。

如果您不习惯async/await,需要花点时间解释一下,所以最好找一个教程。

答案 1 :(得分:-1)

那是一个异步操作。您无法使其同步完成。您可以使用grpc-promisegrpc-caller之类的库来获得承诺,然后使用await来以类似于同步代码的样式进行编码。