node.js - 使 Node.js REPL 的异步函数同步

标签 node.js

我有一个连接到远程 API 的库:

class Client(access_token) {
    void put(key, value, callback);
    void get(key, callback);
}

我想设置一个 Node.js REPL 以便轻松尝试:

var repl = require('repl');
var r = repl.start('> ');
r.context.client = new Client(...);

问题是异步 API 对于 REPL 来说并不方便。我更喜欢一种同步的,它通过返回值产生结果并用异常发出错误信号。像这样的东西:

class ReplClient(access_token) {
    void put(key, value);  // throws NetworkError
    string get(key);       // throws NetworkError
}

有没有办法使用Client实现ReplClient?我希望避免标准 Node.js 包以外的任何依赖项。

最佳答案

您可以利用wait-for-stuff的魔力同步等待东西.

根据您的示例规范:

const wait = require('wait-for-stuff')

class ReplClient {
    constructor(access_token) {
        this.client = new Client(access_token)
    }
    put(key, value) {
        return checkErr(wait.for.promise(this.client.put(key, value)))
    }
    get(key) {
        return checkErr(wait.for.promise(this.client.get(key)))
    }
}

const checkErr = (maybeErr) => {
    if (maybeErr instanceof Error) {
        throw maybeErr
    } else {
        return maybeErr
    }
}

关于node.js - 使 Node.js REPL 的异步函数同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30476726/

相关文章:

node.js - 网站部署到 Azure keystone.js 时出错

javascript - 断言selenium webdriver Node js

node.js - NodeJS 针对 POST 方法弹出警报

javascript - 从 WHATWG URL 对象中删除协议(protocol)属性

javascript - 第二次运行 Node 项目需要很长时间才能加载(在 Windows 10 上)

javascript - 套接字远程端口代表什么?

javascript - 将 NodeJS 数据传递给 Javascript

javascript - req.target 显示未定义 - sails.js

Node.js 执行在重启后卡住

node.js - AWS Lambda 可以访问 S/FTP 或与之交互吗?