javascript - 为什么 axios.get 没有返回 promise

标签 javascript promise axios

在下面的代码中,为什么最后一个 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/

相关文章:

javascript - 如何在 jquery 中单击特定的 list_item 时显示特定的图像?

javascript - 只调用一次函数

javascript - 如何使用 JavaScript 滚动事件更改 HTML 输入

javascript - 如何模拟回调函数接收到的数据(参数),以便可对于Jest地测试回调函数中的逻辑? (例如 fs.readFile)

node.js - 使用Restful API通过Promise包装器调用梦m抓取多站点

javascript - 如何从 setTimeout 做出 promise

javascript - 如何让forceUpdate()重新渲染我的WIzard表单?

javascript - 如何将项目附加到现有 Handlebars 模板中的列表?

javascript - axios GET 请求有效,但无法将结果内容分配给变量

javascript - 在触发下一行之前,使用 axios 进行 react 等待数据获取不起作用