请参考模块javascript中的另一个函数

时间:2019-06-12 11:25:09

标签: javascript node.js express

我正在尝试从脚本中的另一个函数引用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 个答案:

答案 0 :(得分:1)

关键字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)
        })
    },
}

答案 1 :(得分:0)

Parker的解决方案无效,我最终复制了setJSONSMetadata函数并将其复制到getJSONS函数中。很奇怪,我知道。