Skip to content

Instantly share code, notes, and snippets.

@spion
Last active August 29, 2015 14:06
Show Gist options
  • Save spion/e2dc36fc5c2a4885323d to your computer and use it in GitHub Desktop.
Save spion/e2dc36fc5c2a4885323d to your computer and use it in GitHub Desktop.

#v1

Assuming

Promise.promisifyAll(asset.__proto__);
Promise.promisifyAll(permission.__proto__);
 function addPermission(asset, userId) {                               
   var permission = new Permission({ user: userId, asset: asset });    
   return permission.saveAsync().then(function(permission) {                         
     return asset.getChildrenAsync().map(function(asset) { 
       return addPermission(asset, userId); 
     });
   });                                                                 
 }

v2

Assuming

function pcall(obj, method) {
  var args = new Array(arguments.length - 1);
  for (var k = 2; k < arguments.length; ++k) args[k-2] = arguments[k];
  return new Promise(function(resolve, reject) {
    args[arguments.length - 1] = function(err, res) {
      if (err) reject(err); else resolve(res);
    }
    return method.apply(obj, args);
  });
}

we get the slightly more annoying

 function addPermission(asset, userId) {                               
   var permission = new Permission({ user: userId, asset: asset });
   return pcall(permission, permission.save).then(function(err, permission) {
     return pcall(asset, asset.getChildren).map(function(asset) {
       return addPermission(asset, userId);
     });
   });
 }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment