从promise回调更新对象文字中的值的建议方法

时间:2017-04-04 22:25:30

标签: javascript node.js promise

我意识到可能有10种方法可以做到这一点,我通常会通过一些笨拙的方式来实现它 - 但是我希望得到一些关于"清洁"从promise回调中更新对象文字中的值的方法。

我目前的用例是:

let groups2 = {
    groupsList: [],
    updateGroups: () => {
        return axios({
            'url': 'https://gitlab.com/api/v3/groups?per_page=500',
            'method': 'GET',
            'headers': {
                'private-token': GITLAB_API_PRIVATE_TOKEN,
                'cache-control': 'no-cache'
            }
        })
        .then(function (response) {
            console.log(response);
            groups2.groupsList = response.data;
        })
        .catch(function (error) {
            console.log(error);
        });
    }
}

这有效,但感觉不好?"参考" groups2"特别是从内部本身(在这种情况下的回调中)。基本上我想要一个单例,它可以通过可能包含promise的函数对它自己的值进行操作。我正在寻找有关如何做的更好的想法。

1 个答案:

答案 0 :(得分:1)

是的,如果您在对象文字中使用箭头功能,它将不会绑定"这个"对象。所以在es2015中你可以使用shorthand syntax for method declarations on object literals。但是你 希望在.then方法中使用箭头语法---它会绑定"这个"在附上的背景下:

let groups2 = {
    groupsList: [],
    updateGroups() {    // Change this
        return axios({
            'url': 'https://gitlab.com/api/v3/groups?per_page=500',
            'method': 'GET',
            'headers': {
                'private-token': GITLAB_API_PRIVATE_TOKEN,
                'cache-control': 'no-cache'
            }
        })
        .then((response) => { // and this
            console.log(response);
            this.groupsList = response.data; // and use the "this" variable here
        })
        .catch(function (error) {
            console.log(error);
        });
    }
}