我有一个函数可以使用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}}是否记录了正确的答案,我怎样才能让它返回承诺?
答案 0 :(得分:2)
您没有从query
返回任何内容,因此没有承诺会返回到映射函数,因此queries
最终会成为undefined
的数组。你也不应该在return new Promise
内then
- 只需返回你想要在以后消费的价值。改为:
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
,以便返回承诺。