Search code examples
javascripttypescriptecmascript-6promisebluebird

Need help figuring out how to write promise with conditional


This is what I'm trying to do

isAuthorized(params){
  return new Promise(function(resolve, reject) {
    if(params.property){
       doSomething().then(function(e){
         if(e){
            resolve(true);
         } else {
           reject(false);
         }
    } else {
      doSomethingElse().then(function(e){
         if(e){
            resolve(true);
         } else {
           reject(false);
         }
    }
}

but I get a warning: "a promise was created at handler but was not returned from" while the function does as intended.

I have also tried

isAuthorized(params){
  if(params.property){
    return new Promise(function(resolve, reject) {
       doSomething().then(function(e){
         if(e){
            resolve(true);
         } else {
           reject(false);
         }
    });
  } else {
    return new Promise(function(resolve, reject) {
      doSomethingElse().then(function(e){
         if(e){
            resolve(true);
         } else {
           reject(false);
         }
    });
  }
}

let me know if you need any more info.. thanks :)


Solution

  • https://github.com/petkaantonov/bluebird/blob/master/docs/docs/warning-explanations.md#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it

    It's complaining that you aren't returning the inner doSomething() promise anywhere. To avoid the promise-callback anti-pattern, try something like this instead:

    function isAuthorized(params) {
      function resolveIfTruthy(e) {
        if (e) return Promise.resolve(true);
        else return Promise.reject(false);
      }
      if (params.property) {
        return doSomething()
          .then(resolveIfTruthy);
      } else {
        return doSomethingElse()
          .then(resolveIfTruthy);
      }
    }