Как превратить обратный вызов non-idiomatc nodejs в thunk?

Я использую модуль узла Firebase и пытаюсь преобразовать его обратные вызовы в thunks, чтобы иметь возможность использовать их в 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 без успеха...

1 ответ

Решение

Я не думаю, что вы можете использовать thunkify и т. Д., Потому что они пытаются преобразовать стандартную функцию узла в thunk. API Firebase не соответствует стандартной сигнатуре обратного вызова 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');

Или вы можете просто сделать остальные вызовы API, что, я полагаю, то, что вы хотите. API Firebase, кажется, больше подходит для сценариев, событий и т. Д.

Другие вопросы по тегам