function getProjects() {
return new Promise(function(resolve, reject) {
axios.get('url', {
auth: {
username: 'username',
password: ' '
}
}).then(function(response) {
let res = response.data.value;
for (let i = 0; i < res.length; i++) {
projects.push(res[i])
resolve(projects);
}
console.log(projects)
}).catch(function(error) {
console.log(error)
})
})
}
getProjects()
.then(function(proj) {
console.log('proj', proj)
function asnycItemAssignment() {
return new Promise(function(resolve, reject) {
for (let i = 0; i < proj.length; i++) {
axios.get(`url`, {
auth: {
username: 'username',
password: ' '
}
}).then(function(response) {
//console.log(response.data.value)
finalArr.push(response.data.value)
})
.catch(function(error) {
console.log(error)
})
}
resolve(finalArr)
})
}
asnycItemAssignment()
.then(function(res) {
console.log('res', res)
function flatten() {
return new Promise(function(resolve, reject) {
var myNewArray3 = [];
for (var i = 0; i < res.length; ++i) {
for (var j = 0; j < res[i].length; ++j) {
console.log('pushed', i, j, res[i][j])
myNewArray3.push(res[i][j]);
}
}
console.log('finalArr', myNewArray3)
resolve(myNewArray3)
})
}
flatten()
.then(function(value) {
console.log('val', value)
})
})
})
}
这是我想要做的。
我正在尝试从API提取项目列表,将其存储到
projects
并将其解析为Promise
。再一次,我尝试使用projects
的名称,并将其用于另一个向我提供该项目内数据的API。这会将其存储到finalArr
中。这次我解决finalArr
。finalArr
是对象数组的数组。像[[{...}{...}][{...}]]
这样的东西,这就是为什么我想变平使其像[{...},{...},{...},{...}]
的原因。但是,在我的
asnycItemAssignment
中,应该为我提供res
结果的finalArr
不能为我提供其中包含所有值的完整数组。代码很乱,但是我觉得我做对了。
我究竟做错了什么?
编辑
async function getData() {
let getProject =
await axios.get('url', {
auth: {
username: 'username',
password: ' '
}
})
let projects = await getProject.data.value;
projects.map(project => {
let ItemAssignment =
axios.get(`url`, {
auth: {
username: 'username',
password: ' '
}
})
let values = await ItemAssignment.data.value
console.log(values)
})
console.log('pr', projects)
}
getData()
最佳答案
我真的认为您应该阅读异步/等待。当您依靠一个异步操作的结果执行另一个操作时,它使代码更具可读性。下面是一些伪代码,以助您一臂之力:
async function go() {
try {
const projects = await getProjects();
projects.map(project => {
const itemAssignments = await asnycItemAssignment(project);
const flattened = await flatten(itemAssignments);
console.log(flattened);
}
} catch (e) {
console.error(e); // 💩
}
}
另外,一般来看如何使用axios:
async getData() {
return await axios(...);
}
然后,您可以使用getData,例如:
const r = await GetData();
关于javascript - 异步 promise 没有获得正确的值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51992103/