蓝鸟的承诺解决方案返回未定义

时间:2018-07-30 22:44:42

标签: javascript promise bluebird

我是Promise的新手,所以我正在尝试Bluebird的Promise API。我有以下方法返回Promise.try()

CheckDb-承诺方法

const Prom = require("bluebird")

..........
..........

let checkDb = () => {
 return Prom.try(() => {
   SomePromiseMethod().then(result => {
    if (//some condition) {
      let resp = { 
          res: result, 
          somethingelse : somethingelse 
      }
      return Prom.resolve(resp)
    }
    else 
      return Prom.reject(new Error("some reason"));
   }, err => {
      return Prom.reject(err);
   })
   .catch(err => {
     return Prom.reject(err);
   });
 });
}

SomeTask-调用promise方法的方法

exports.someTask = () => {
      checkDb().then(resolved => {
       console.log(resolved) // coming undefined
      }, 
      rejected => {
       console.error(rejected);
      })
      .catch(err => {console.error(err)});
    }

这里的问题是Promise函数的resolved方法的then组件返回未定义。

我调查了thisthis,但无法弄清。

1 个答案:

答案 0 :(得分:1)

尝试不使用此Prom.resolve直接返回值,如下所示:

...
        return SomePromiseMethod().then(result => {
            if (//some condition) {
              let resp = { 
                  res: result, 
                  somethingelse : somethingelse 
              }
              return resp
            }
            else 
              throw new Error("some reason"));
           }
    ...

如果您处于promise的“ then”方法中,则可以通过返回一个值来解决它,该值将传递给链中的下一个“ then”方法。

如果有以下情况,您将明确使用resolve方法:

  • 一个“手工创建”的延缓程序,您想解决它
  • 由您创建的承诺,如果您想“承诺”不是承诺的内容,例如下面的示例:

    返回新的Promise(函数(解决,拒绝){     ...     resolve(value);

    })

这不是您的情况。 (编辑了答案的这一部分,以免造成误解)