Обратитесь к другой функции внутри модуля JavaScript - PullRequest
1 голос
/ 12 июня 2019

Я пытаюсь сослаться на функцию getJSONS из другой функции в скрипте, но я не могу этого сделать.

Я получаю ошибку (node:5857) UnhandledPromiseRejectionWarning: TypeError: this.getJSONS is not a function, как я могу это исправить?

module.exports = {
    getJSONS(bucket, storageDir, folderNameLength) {
        return new Promise((resolve, reject) => {
            resolve(`filesss`)
        })
    },

    setJSONSMetadata(bucket, storageOptions) {
        return new Promise((resolve) => {
            this.getJSONS(bucket, storageOptions, storageOptions.prefix.length).then((jsonFiles) => {
                // do something
            });

            resolve(true)
        })
    },
}

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Ключевое слово this указывает на функцию в области видимости (в вашем случае анонимная функция передана в new Promise), а не указывает на экспортируемый объект.

Один способ обойти этосохранить значение this до создания обещания в переменную.Затем вызовите переменную вместо this.Обычной практикой является использование слова self.Это может выглядеть примерно так:

module.exports = {
    getJSONS(bucket, storageDir, folderNameLength) {
        return new Promise((resolve, reject) => {
            resolve(`filesss`)
        })
    },

    setJSONSMetadata(bucket, storageOptions) {
        const self = this; // store the value of `this` from the higher scope
        return new Promise((resolve) => {
            // `this` inside here is different
            self.getJSONS(bucket, storageOptions, storageOptions.prefix.length).then((jsonFiles) => {
                // do something
            });

            resolve(true)
        })
    },
}
0 голосов
/ 14 июня 2019

Решение от Parker не сработало, в итоге я скопировал функцию setJSONSMetadata и продублировал ее внутри функции getJSONS. Странно, я знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...