Promise.resolve внутри. Тогда дает мне неопределенный - PullRequest
0 голосов
/ 05 июня 2018

Я не знаю, почему мой 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 голосов
/ 05 июня 2018

Первая ошибка: не promise.resove, а Promise.resolve.

Вторая проблема: вы ждете внутри не асинхронной функции и затем возвращаете разрешенное обещание.

РЕДАКТИРОВАТЬ: лучшее решение (благодаря @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)
})

СТАРЫЙ ОТВЕТ:
Вы можете:

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

Спасибо Дереку за предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...