Как превратить обратный вызов 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, кажется, больше подходит для сценариев, событий и т. Д.