Wie funktioniert promisifyAll oder was sind die Voraussetzungen dafür?

In einer Versprechensbibliothek hat Bluebird die Funktion promisifyAll oder andere ähnliche Bibliotheken, die behaupten, asynchrone Funktionen mit Rückrufmustern in versprechensbasierte umzuwandeln, dh.resolve(), reject(), oderdone() .. Also, wie funktioniert es?

Beispielsweise

function myAsync1 (data, url, callBack) {...}

und wenn ich es in

Promise.promisify(myAsycn1);

then wird meine Funktion so funktionieren ..

myAsync1('{..}', 'http://..').then(function(){...});

Das hat mich gestört. Gibt es ein Muster, dem asynchrone, nicht versprechende Bibliotheken oder Funktionen folgen müssen, damit Bluebird promisifyAll sie in versprechungsbasierte Methoden konvertiert, oder gibt es eine Art Magie, die sie konvertiert?

Wenn nicht, was sind dann die Anforderungen und wie funktioniert es mit vorhandenen Bibliotheken wie Mongodb usw.