>>981
全部一緒でいい
あと strongSelf が普通

someHeavyMethod(param, completion: { [weak self] in
 guard let strongSelf = self else { return }
 
 someHeavyMethod2(param2, completion: { [weak self] in
  guard let strongSelf = self else { return }

  someHeavyMethod3(param3, completion: { [weak self] in
   guard let strongSelf = self else { return }
   ...
  })
 })
})

Promise 使うのにライブラリ修正なんて必要ない
非同期メソッドを Promise を返すメソッドでラップする