Javascript Promise.all返回未定义的值

Javascript Promise.all返回未定义的值,javascript,node.js,asynchronous,promise,Javascript,Node.js,Asynchronous,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.

我有一个功能,可以通过
请求承诺
向服务器发出多个请求:

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()
返回一个
未定义的
值数组。考虑到
query()
中的
console.log(res)
记录了正确的响应,我如何让它返回承诺?

您没有从
query
返回任何内容,因此没有承诺返回到映射函数,因此
查询
最终成为一个
未定义
的数组。您也不应该
中返回新承诺
,然后
——只需返回您希望稍后使用的值即可。改为:

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

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

查询
函数没有
return
语句,因此它总是返回
未定义的

var querys=data.map(query)
因此会将数据映射到
未定义值的数组中


您需要编辑
query
,以便它返回一个承诺

将查询函数更改为query=async函数($…然后重试:)@Kai,这不会有帮助。我怀疑
返回新承诺(resolve=>res)
是否会返回任何内容all@Bergi它返回了一个永远无法解决的承诺。@JLRishe是的,这就是我的意思。因此
musicData()
永远不应该解析为任何内容的数组。