All the methods need to handle synchronous and asynchronous  operation, should this should be something like:

```js
return when(this.getCookies(), function (cookies) {
  cookies = cookies.filter(function(cookie) {
    return cookie.name == cookieName;
  });
  if(cookies.length === 0) return null;
  else return cookies[0];
});
```

That way we're returning a Promise when in 'async' mode.  Rather than returning a singleton array as you were doing, we also consistently return either a cookie or null.