Promise.all返回未定义的值

时间:2018-05-01 06:25:10

标签: javascript node.js asynchronous promise

我有一个函数可以使用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()中的{{1}}是否记录了正确的答案,我怎样才能让它返回承诺?

2 个答案:

答案 0 :(得分:2)

您没有从query返回任何内容,因此没有承诺会返回到映射函数,因此queries最终会成为undefined的数组。你也不应该在return new Promisethen - 只需返回你想要在以后消费的价值。改为:

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

(注意不要隐式创建全局变量)

答案 1 :(得分:0)

query函数没有return语句,因此它将始终返回undefined

因此,

var queries = data.map(query)会将数据映射到undefined值数组。

您需要修改query,以便返回承诺