Promise.resolve里面.then给我undefined

时间:2018-06-05 14:45:34

标签: javascript promise

我不知道为什么我的promise.resolve返回未定义。

我的代码结构是这样的:

const request = require('request-promise')
var lotteryid = function(){

  const option = {/* info about the request url */}
  request(option)
  .then(function(body){
     // do something
     // get some value from the body. let's call it x
     return promise.resolve(x)

  })
  .catch(function(err){
    // got any error
    return promise.reject(err)      
  })

}

这样做之后,我调用了这个函数:

lotteryid.then(function(x){
    **x is undefined in my case** 

}).catch(function(err){

    return promise.reject(err)      
})

任何人都可以帮助我吗?感谢

1 个答案:

答案 0 :(得分:0)

第一个错误:不是promise.resove而是Promise.resolve

第二个问题:你在非异步函数内等待,然后返回一个已解决的promise。

编辑:更好的解决方案(感谢@Mikael Lennholm)

const request = require('request-promise')
var lotteryid = function() {
  return request(option)
    .then(function(body) {
      // do something
      // get some value from the body. let's call it x
      return x
    })
}

和以前一样:

lotteryid.then(function(x) {
  // do_something(x)
})
.catch(function(err) {
  // console.error(err)
})

OLD ANSWER:
你可以:

  1. 返回一个新的承诺,并在您在身体上做了一些事情后解决它

    const request = require('request-promise')
    var lotteryid = function() {
       return new Promise((resolve, reject) => {
         request(option)
           .then(function(body) {
             // do something
             // get some value from the body. let's call it x
            resolve(x)
           })
           .catch(function(err){
             // got any error
             reject(err)      
           })
       })
    }
    
  2. 使函数异步并返回值,如

    const request = require('request-promise')
    var lotteryid = async function() {
      request(option)
        .then(function(body) {
          // do something
          // get some value from the body. let's call it x
          return x
        })
    }
    
  3. 感谢Derek的建议。