ES2015でPromiseについで、ES2017でAsync/Awaitが追加され、Promiseが更に使いやすくなってきているのもかかわらず、古くからあるパッケージなどは、対応させるのが大変なのか、一向に対応してくれないものもたくさんあります。
ある日突然callbackからPromiseに変わったらみんな戸惑うので、callbackが無いときにPromiseを返すような処理を書かなくてはなりません。単純に考えてみれば、callbackがある時の処理と、callbackがなくPromiseを返す処理、で倍の量になってしまうのではないかと僕も思っていました。
しかし、実際にそうでしょうか?
その答えはytdl-coreのソースコードを眺めているときでした。
この関数では、引数にcallbackが無いときに、自身をcallback付きで呼び出し、その中でresolve/rejectをするPromiseを返していたのです。
module.exports = function getInfo(link, options, callback) {
// ~~~
if (!callback) {
return new Promise((resolve, reject) => {
getInfo(link, options, (err, info) => {
if (err) return reject(err);
resolve(info);
});
});
}
// ~~~
実際のソースコードはこちら
これで既存のコードも楽にPromiseに対応できそうです!
よきPromiseライフを