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()
永远不应该解析为任何内容的数组。