【问题标题】:Need help figuring out how to write promise with conditional需要帮助弄清楚如何用条件编写承诺
【发布时间】:2018-09-12 00:03:33
【问题描述】:

这就是我想要做的事情

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

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

【问题讨论】:

    标签: javascript typescript ecmascript-6 promise bluebird


    【解决方案1】:

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

    【讨论】:

    • 我正要写非常相似的答案。没有必要引入命名函数。这可以通过const promise = params.property ? doSomething() : doSomethingElse(); return promise.then(e => { if (e) return true; else throw false; }) 来实现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2013-11-21
    相关资源
    最近更新 更多