javascript - 需要帮助弄清楚如何编写带有条件的 Promise

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

但我收到警告:“在处理程序中创建了一个 promise ,但未从其中返回”,而该函数按预期执行。

我也尝试过

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

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

最佳答案

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 。为了避免 promise 回调反模式,请尝试这样的操作:

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

关于javascript - 需要帮助弄清楚如何编写带有条件的 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49616903/

相关文章:

javascript - 模拟依赖的构造函数 Jest

javascript - 为什么这个 for-of 循​​环中的对象解构不起作用?

javascript - 如何在 IE 9 中使用 JavaScript 从样式属性获取背景颜色作为十六进制值?

javascript - 按每个数组中包含的元素对数组数组进行排序

typescript - 在 Typescript 对象中提取 ENUM 的字符串值

依赖于 TypeScript 的字符串文字属性和索引

javascript - 如何在不使用其模块名称的情况下为类创建新对象?

javascript - React js 中的环绕

javascript - Android - 深度链接并非在所有情况下都适用于所有浏览器

javascript - 获取 polyfill 在 Edge(或 IE)上不起作用