【问题标题】:How to get return value from stub function?如何从存根函数中获取返回值?
【发布时间】:2020-07-13 00:05:22
【问题描述】:

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

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

参数中的函数会被异步调用,但是我需要同步获取它的值。 如何做到这一点?

【问题讨论】:

  • 您是否尝试过将其设为async 函数并使用await 关键字?

标签: javascript node.js grpc


【解决方案1】:

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

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,该Promise 将在以后解决(AKA 异步)。使用 await 关键字,您可以告诉 JavaScript 在继续执行之前等待 Promise 解决,模拟同步代码也是如此,尽管不是真正同步的。

如果你不习惯async/await,解释有点长,最好找个教程。

【讨论】:

    【解决方案2】:

    这是一个异步操作。你不能让它同步完成。您可以使用 grpc-promise 或 grpc-caller 之类的库来获得承诺,然后使用 await 以能够以与同步代码类似的风格进行编码。

    【讨论】:

      猜你喜欢
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多