在下面的代码中,为什么最后一个 axios.get( url.toString())
没有返回 Promise 而是返回 undefined ?我们该如何处理这个问题?
function getCommentersEmailIds( username ) {
let foundUserId = undefined;
//first get user id of username
axios.get( 'https://jsonplaceholder.typicode.com/users?username='+username )
.then(function( response ) {
var foundUser = response.data.find(u=>u.username === username);
return foundUser.id;
})
.then(function( userId ) {
let url = 'https://jsonplaceholder.typicode.com/users/'+ userId.toString() +'/posts';
return axios.get( url.toString());
})
.then(function( posts ) {
//get id of the first post
let postId = posts.data[0].id;
let url = 'https://jsonplaceholder.typicode.com/comments?' + postId.toString();
return axios.get( url.toString());
})
.catch(function( error ) {
console.log( error.message );
});
}
var promiseForComments = getCommentersEmailIds('Bret');
promiseForComments.then(function( comments ) {
comments.data.array.forEach(comment => {
console.log(comment.email);
});
})
.catch(function( error ) {
console.log( error.message );
});
最佳答案
这里的问题是您缺少 return
getCommentersEmailIds()
中的声明而不是第二次调用 axios.get
所特有的问题:
function getCommentersEmailIds( username ) {
let foundUserId = undefined;
//Update: add return before axio.get
return axios.get( 'https://jsonplaceholder.typicode.com/users?username='+username )
.then(function( response ) {
var foundUser = response.data.find(u=>u.username === username);
return foundUser.id;
})
.then(function( userId ) {
let url = 'https://jsonplaceholder.typicode.com/users/'+ userId.toString() +'/posts';
return axios.get( url.toString());
})
.then(function( posts ) {
//get id of the first post
let postId = posts.data[0].id;
let url = 'https://jsonplaceholder.typicode.com/comments?' + postId.toString();
return axios.get( url.toString());
})
.catch(function( error ) {
console.log( error.message );
});
}
通过返回 axios.get()
的 promise 来自getCommentersEmailIds()
,后续的链接(导致 forEach()
迭代到 comments.data.array
)应该按预期执行。
希望有帮助!
关于javascript - 为什么 axios.get 没有返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59098687/