LoginSignup
3
1

More than 5 years have passed since last update.

既にあるcallback形式の関数を互換性を保ちつつPromiseにも対応させる

Last updated at Posted at 2018-10-08

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ライフを

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1