2017-02-20 19 views
1

Zookeeper предоставляет метод getChildren, который принимает путь к узлу и возвращает дочерние элементы этого узла в обратном вызове. Он также устанавливает часы во время процесса и вызывает наблюдатели обратный вызов, когда часы срабатываютПродвигающая функция обратного вызова Promikifying Zookeeper

getChildren(path, function(err,event){ 
     //this is the watcher callback 
    }, 
    function(err,children,stats){ 
     //children callback 
    } 
) 

Так что, если я использую Блюберд-х Promise.promisify для promisify этой функции. Откуда я знаю, что обещание, возвращаемое этой функцией, является наблюдателем или детьми?

ответ

1

Если я правильно понимаю интерфейс getChildren(), последний обратный вызов предназначен для вызова один раз со списком дочерних объектов. Первый обратный вызов - это обратный вызов наблюдателя, который можно назвать неопределенным числом раз, чтобы уведомить вас о различных изменениях.

Учитывая, что последний обратный вызов может соответствовать обещанию. Первый обратный вызов не может и должен оставаться обратным вызовом. Кроме того, второй обратный вызов возвращает несколько результатов (что отлично не соответствует обещаниям), поэтому вы должны также делать надбавки за это, используя multiArgs и .spread.

Таким образом, вы могли бы сделать что-то вроде этого:

let getChildrenP = Promise.promisify(getChildren, {multiArgs: true}); 

getChildrenP(path, function(err, event) { 
    // watcher event occurred here 
    // this may get called multiple times 
}).spread(function(children, stats) { 
    // children are available now 
}).catch(function(err) { 
    // error here 
});