为Node.js REPL创建异步函数同步

时间:2015-05-27 08:12:34

标签: 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
}

有没有办法使用ReplClient来实施Client?我宁愿避免除标准N​​ode.js包之外的任何依赖。

1 个答案:

答案 0 :(得分:0)

您可以使用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
    }
}