Promise.all возвращает неопределенное значение - PullRequest
0 голосов
/ 01 мая 2018

У меня есть функция, которая делает несколько запросов с request-promise на сервер:

query = function(entity) {
  //some SPARQL request here with the "entity" parameter
  rp(url)
  .then(function(res) {
    console.log(res)
    return new Promise(resolve => res)
  })
  .catch(function(err) {
    console.log("error")
  })
}

async function musicData() {
  data = [1,2,3,4]

  var queries = data.map(query)

  var results = await Promise.all(queries)

  return results
}

musicData()
.then(function(resp) {
  console.log(resp);
})
.catch(function(err) {
  console.log("err")
})

Я не могу понять, почему musicData() возвращает массив значений undefined. Как я могу заставить его вернуть обещания, учитывая, что console.log(res) в query() записывает правильный ответ?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Функция query не имеет оператора return, поэтому она всегда будет возвращать undefined.

Поэтому

var queries = data.map(query) отобразит данные в массив undefined значений.

Вам нужно отредактировать query, чтобы вернул Обещание .

0 голосов
/ 01 мая 2018

Вы ничего не возвращаете из query, поэтому никакое обещание не возвращается функции отображения, поэтому queries заканчивается как массив undefined с. Вы также не должны return new Promise внутри then - просто вернуть значение, которое вы хотите использовать позже. Изменить на:

const query = function(entity) {
  return rp(url)
    .then(function(res) {
       console.log(res);
       return res;
     })
     // ...

(старайтесь не создавать неявно глобальные переменные)

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