需要帮助搞清楚如何用条件写承诺

时间:2018-04-02 18:44:25

标签: javascript typescript ecmascript-6 promise bluebird

这就是我想要做的事情

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);
         }
    }
}

但我得到一个警告:"承诺是在处理程序中创建的,但未从"虽然功能按预期进行。

我也试过

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);
         }
    });
  }
}

如果您需要更多信息,请告诉我..谢谢:)

1 个答案:

答案 0 :(得分:2)

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

它抱怨你没有在任何地方返回内部doSomething()承诺。为了避免promise-callback反模式,请尝试这样的事情:

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);
  }
}