【发布时间】:2020-11-05 06:31:52
【问题描述】:
我有几个 api 调用请求,我试图创建承诺,然后使用 Promise.all 执行所有请求,但是它给出的是空值而不是数组。下面是我的代码。
function getUser(arrUser) {
var student = [];
return new Promise((resolve, reject) => {
if (arrUser.length > 0) {
var promises = arrUseridRequest.map(userRequeset => {
return getRequest(userRequeset).then(result => {
student.push(JSON.parse(result.body).result[0].Name);
console.log(student); //This is giving right details.
}).catch(error => {
reject(error);
});
});
Promise.all(promises).then(StuName => {
resolve(StuName.join());
})
}
});
}
这就是我试图立即获取值的方式:
getUser('123').then(student => {
console.log(Student) //Coming as empty
});
getRequest是我的api调用nodeJs请求模块。我的代码有什么问题?
【问题讨论】:
-
你正在使用 Promise 作为一个花哨的回调系统。 Promise 代表一个价值本身。所以你需要创建一个返回一些东西的承诺数组,而不是填充一些外部数组。然后使用 Promise.all 生成最终结果。
-
console.log(Student)这是错字吗?这不应该是student和小s吗? -
不确定是否需要学生数组来存储结果,甚至是
new Promise位。我认为... nm @YuryTarabanko 刚刚回答了我要做什么。 -
arrUser参数在哪里使用?什么是arrUseridRequest? -
function getUsers(users) { return Promise.all( users.map(user => /* create a promise returning what you need for each user*/)}写不出更有用的东西,因为你的代码 sn-p 中到处出现一些随机变量。
标签: javascript asynchronous promise