【问题标题】:How to turn non-idiomatc nodejs callback into thunk?如何将非惯用的节点 js 回调转换为 thunk?
【发布时间】:2014-10-23 22:56:06
【问题描述】:

我正在使用 Firebase 节点模块并尝试将其回调转换为 thunk 以便能够在 Koa 中使用它们。

这是根据 Firebase 文档的原始事件侦听器回调:

projects.on('value', function (snapshot) {
  console.log('The read succeeded: ' + snapshot.val());
}, function (errorObject) {
  console.log('The read failed: ' + errorObject.code);
});

这是我想在我的 Koa 项目中添加它的地方:

function *list() {

  // Get the data here and set it to the projects var

  this.body = yield render('list', { projects: projects });
}

有人知道怎么做吗?尝试过 thunkify、thunker 和 thu 都没有成功...

【问题讨论】:

    标签: firebase koa co


    【解决方案1】:

    我不认为您可以使用 thunkify 等,因为他们正在尝试将标准节点函数转换为 thunk。 firebase api 不遵循

    的标准 node.js 回调签名
    fn(param1, parm2,.., function(err, result){});
    

    thunkify 期待哪个。

    我觉得这样就可以了

    var findProjectsByValue = function(value){
        return function(callback){
            projects.on(value, function(result){
                callback(null, result);
            }, function(err){
                callback(err);
            })            
        }
    };
    

    那么你会吃掉它

    var projects = yield findProjectsByValue('value');
    

    或者你可以只调用rest api,我认为这就是你想要的。 firebase api 似乎更适用于事件场景、socketio 等

    【讨论】:

    • 非常感谢!它工作得很好。唯一的问题是它实际上不是按值查找,而是您可以选择监听“value”、“child_added”、“child_changed”、“child_removed”或“child_moved”的变化。但这只是命名。
    • 值得注意的是 co/koa,假设您使用的是支持 Promises 和 thunk...以防它们可用于您正在使用的 SDK/API 客户端。跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2018-11-07
    • 1970-01-01
    • 2017-03-31
    • 2017-06-10
    相关资源
    最近更新 更多