javascript - 引用模块 javascript 中的另一个函数

标签 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)
        })
    },
}

最佳答案

关键字 this 指向范围内的函数(在您的例子中,是传递给 new Promise 的匿名函数),而不是指向您导出的对象。

一种变通方法可能是在创建 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)
        })
    },
}

关于javascript - 引用模块 javascript 中的另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561075/

相关文章:

node.js - 尝试安装类验证器和类转换器时 NestJS "Warn EBADENGINE unsupported engine @angulardevkit"

express - 预检响应中不允许请求 header 字段 Access-Control-Allow-Headers 本身

JavaScript 导致大量内存泄漏

javascript - 错误: concatUint8Array: Data must be in the form of a Uint8Array

node.js - 如何将 Google Analytics 跟踪代码与 node-express 应用程序一起使用?

javascript - 使用 MariaDB、Sequelize 和 Node.js 获取数百万条记录以显示在 DevExtreme PivotGrid 中

javascript - 如何防止 IE8 加载 javascript 库

javascript - Fetch 返回我自己的 index.html 的 html 源

node.js - http.createServer(app) 诉 http.Server(app)

javascript - 如何使用 Stripe 和 Node.js 创建费用